为什么我使用componentWillReceiveProps收到此错误?

问题描述 投票:1回答:1

接收错误:×超出最大更新深度。当组件在componentWillUpdate或componentDidUpdate中重复调用setState时,可能会发生这种情况。 React限制嵌套更新的数量以防止无限循环。

试图删除带有错误和setState的部分(因为它看起来像是无限循环的原因)。没有帮助

componentWillReceiveProps(nextProps){
    if(nextProps.auth.isAuthenticated){
        this.props.history.push('/dashboard')
    }
    // if(nextProps.errors){
    //     this.setState({
    //         errors: nextProps.errors
    //     })
    //     console.log('Error');
    // }
};
javascript reactjs react-router infinite-loop
1个回答
3
投票

history.push导致rerender,它调用componentWillReceiveProps,一切都进入循环。

请改用此代码:

componentDidUpdate(prevProps) {
  if (
      this.props.auth.isAuthenticated
      && this.props.auth.isAuthenticated !== prevProps.auth.isAuthenticated
  ) {
    this.props.history.push('/dashboard')
  }
}

如果你在其他地方遇到类似的错误,这仍然会导致循环。

© www.soinside.com 2019 - 2024. All rights reserved.