在这个非常基本的例子中,我在组件Bar
的render函数中包含了组件Foo
。我观察到每次Foo重新渲染时componentDidMount
的{{1}}方法都会触发 - 这是正确的行为吗?
Bar
注意:我已经问过这个问题,以便检查预期的行为,以便追踪错误。
答案 0 :(得分:4)
儿童的行为取决于父母的行为。
装载组件后立即调用如果您的父组件只是重新渲染,则预期子组件也只是重新渲染,因为componentDidMount()在组件的生命周期中只调用一次。
答案 1 :(得分:1)
在渲染函数中使用if if/else
逻辑时需要小心。在下面的示例中,如果Bar
道具值更改为loading
,true
组件将会卸载:
import Bar from './Bar.jsx';
export default class Foo extends Component {
render() {
if(this.props.loading){
return (
<div>Loading...</div>
);
}
else{
return (
<Bar />
);
}
}
}