Reactjs setState(…)只能更新已安装或正在安装的组件

Reactjs setState(…)只能更新已安装或正在安装的组件,reactjs,react-redux,Reactjs,React Redux,我有一个带有寄存器的页面,当我刚转到它时,如果有很多寄存器,它们就会加载,但是如果我转到页面底部,它们都会消失,并且这个错误会再次出现 收到寄存器列表时,控制台中发生错误 警告:设置状态…:只能更新已安装或正在安装的 组成部分这通常意味着您在未安装的服务器上调用setState 组成部分这是禁止操作。请检查代码以了解 注册表列表组件 错误所指向的代码的假定部分 fetchRegistersOnScroll() { const { actions, current, dispatch

我有一个带有寄存器的页面,当我刚转到它时,如果有很多寄存器,它们就会加载,但是如果我转到页面底部,它们都会消失,并且这个错误会再次出现

收到寄存器列表时,控制台中发生错误

警告:设置状态…:只能更新已安装或正在安装的 组成部分这通常意味着您在未安装的服务器上调用setState 组成部分这是禁止操作。请检查代码以了解 注册表列表组件

错误所指向的代码的假定部分

  fetchRegistersOnScroll() {
    const { actions, current, dispatch } = this.props
    page++

    actions.fetchRegisters(current, page)
      .then(res => {
        dispatch({ type: 'REGISTER/SCROLL', payload: res.data });

        if (res.data.items.length < 20)
          this.setState({ hasMoreItems: false })
      })
  }

我认为当您尝试更新redux存储时,您的组件会再次重新装载。因此,我建议您在派遣行动之前设置状态。另外,在发布完整代码的帖子的另一个链接中,您同时执行了两个redux分派操作。我不知道他们到底应该做什么,但我认为如果你能在一个单一的请求中提出他们会更好

if (res.data.items.length < 20)
    this.setState({ hasMoreItems: false }) 
或者,您也可以在componentWillReceiveProps中调用setState。这也可以帮助您删除错误


我希望有帮助。谢谢

正如错误所说,您的组件在响应返回之前已卸载,因此它试图对已卸载的组件调用setState。我如何解决此问题?这取决于导致它们卸载的原因。在你的问题中没有关于组件安装逻辑的信息,所以我真的不能说。不管怎样,这都是两个独立的问题。首先是为什么您的组件不应该卸载,其次是您不处理当请求返回时组件卸载的情况。对于第二个问题,您可以跟踪是否使用简单的布尔属性装载组件。componentDidMount中的this.mounted=true和ComponentWillUnmount中的this.mounted=false是否卸载正在卸载的外部组件?也就是说,有fetchRegistersOnScroll的那个?如果你尽可能多地分享上下文,这会有所帮助。似乎外部组件正在失效,因此所有东西都消失了。还有-也许可以分享一下你是如何注册活动的。我有一个类似的问题,这里有所有的代码。如果可以的话,请看。