我正在尝试在setState
中进行componentDidUpdate
。
我做了一些研究,读到我必须在制作setState
之前放置一些条件,这样它才不会创建永远的循环,但无法正常工作。
有什么建议吗?
这是我的代码
componentDidUpdate() {
const { isAuthenticated, navigation,actions } = this.props;
try {
if (isAuthenticated) {
navigation.navigate({ routeName: 'AlternatePhrase' });
this.setState({isCreating:false})
}
} catch (e) {
console.log('--------e', e);
}
}
我收到此错误:
Error: Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.
答案 0 :(得分:1)
检出docs for componentDidUpdate,您会看到您有权访问prevProps
。避免循环的condition
是检查isAuthenticated
是否在更新过程中进行了更改,并且只有在更改时才进行更改,然后继续执行流程:
componentDidUpdate(prevProps) {
const { isAuthenticated, navigation } = this.props;
if (prevProps.isAuthenticated !== isAuthenticated) {
try {
if (isAuthenticated) {
navigation.navigate({ routeName: 'AlternatePhrase' });
this.setState({isCreating:false})
}
} catch (e) {
console.log('--------e', e);
}
}
}