3 回答
TA贡献1828条经验 获得超6个赞
在您的componentDidUpdate状态中,按以下方式更新:
this.setState({ error: true })
您这样做的条件是:
Object.keys(this.context.errors).includes(this.props.name)
设置状态会导致组件重新渲染并更新,因此componentDidUpdate将再次运行。然而,当这种情况发生时,您的上述情况很可能仍然成立。因此,你将再次更新状态,React 不会短路状态更新,因为你每次都创建一个新对象。在这里拯救自己的一种简单方法是将您的条件更改为:
if (bad && !this.state.error) {
this.setState({ error: true }); // traceback give me error too.
};
TA贡献1784条经验 获得超8个赞
您应该在内部使用某种类型的条件componentDidUpdate,以免触发状态更新。就像下面这样:
componentDidUpdate(prevProps, prevState) {
let bad = Object.keys(this.context.errors).includes(this.props.name);
if (prevState.error !== this.state.error && bad) {
this.setState({ error: true }); // traceback give me error too.
};
};
始终比较内部的 prevState 和 currentState 值,componentDidUpdate因为在大多数情况下这个条件就足够了。
注意:开始使用之前,componentDidUpdate请参阅文档,因为它还提供了prevProps在prevState这种情况下始终有用的值。
TA贡献1844条经验 获得超8个赞
改变
if (bad) {
this.setState({ error: true }); // traceback give me error too.
};
到
if (bad && !this.state.error) {
this.setState({ error: true }); // traceback give me error too.
};
setState在 of 内部使用componentDidUpdate将导致它重新渲染和调用componentDidUpdate。添加额外的检查将有助于停止此循环。
添加回答
举报