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。添加額外的檢查將有助于停止此循環。
添加回答
舉報