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

时间:2019-03-25 18:09:21

标签: javascript reactjs react-router infinite-loop

接收错误:× 超过最大更新深度。当组件重复调用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');
    // }
};

1 个答案:

答案 0 :(得分:3)

history.push导致重新渲染,它调用componentWillReceiveProps,一切都循环进行。

改为使用以下代码:

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

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