reactive child components (untested)