小编DrN*_*Nio的帖子

无法在socket.io回调React.js中调用setState

我面临以下问题:

在处理状态的React组件内部,有一个与socket.io的websocket连接。每当我收到一些事件时,都应该执行一些操作并更新组件的状态。例:

socket.on('some event', () => {
 this.aMethod() // this method calls setState()
})
Run Code Online (Sandbox Code Playgroud)

问题是出现以下消息:

Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
Run Code Online (Sandbox Code Playgroud)

但是我没有componentWillUnmount在任何地方使用方法。并且该组件未卸载。

如果我更换aMethodthis.props.aMethod()和更新,将工作父组件的状态(存在amethod方法在这两个组件)。问题在于该组件非常庞大,因为它是一个容器,将所有状态移至父级,使用props会导致大量重写。

这使我想到了该应用程序的反应路线可能存在一些问题。

父组件具有以下路由(从概念上讲):

 <Switch>

          <Route exact path={'/user/:id'} render={(props) => <User />} />
          <Route exact path={'/users'} render={(props) => <User />} />

  </Switch>
Run Code Online (Sandbox Code Playgroud)

我之所以使用 …

javascript socket.io reactjs react-router react-state

4
推荐指数
1
解决办法
292
查看次数