我刚刚看过有关Inside的讨论。setState()``componentDidMount()
setState()``componentDidMount()
您可以看到该render()函数之后,该componentDidMount()函数将被React调用。当您进行setState()呼叫时,不仅componentDidMount()使整个组件树都被重新渲染,不仅是当前组件- 别忘了,当前组件刚刚完成了渲染。
render()
componentDidMount()
setState()
有些人建议把setState()电话打进去componentWillMount()。在某些情况下,我想获取渲染元素的高度并将其存储为状态,而上述方法将不起作用。我还浏览了React的官方网站,它建议在内部进行Ajax调用componentDidMount(),这再次违背了上述想法。
componentWillMount()
那么,setState()放进去我是否错了componentDidMount()?如果是,我应该申请什么替代方案?
您可以setState()立即致电componentDidMount()。它会触发额外的渲染,但是会在浏览器更新屏幕之前发生。这样可以保证,即使render()在这种情况下将调用两次,用户也不会看到中间状态。 请谨慎使用此模式,因为它经常会导致性能问题 。在大多数情况下,您应该能够在中分配初始状态constructor()。但是,对于模态和工具提示之类的情况而言,当您需要 在渲染取决于其大小或位置的对象之前测量DOM节点 时,这是必要的 。
constructor()
反应文档
使用DidMount可以清楚地表明,只有在初始渲染之后才会加载数据。这提醒您正确设置初始状态,因此您不会以导致错误的未定义状态结束。
例
TLDR: -如果在构造函数中具有所有需要的数据-在state此处分配
state
constructor(props) { super(props); // Don't call this.setState() here! this.state = { counter: 0 }; }