使用Redux调度与组件无关的操作的正确方法是什么?

时间:2016-03-23 17:23:38

标签: reactjs redux

我有一个项目,其中nodejs服务器通过socket.io将推送事件传递到反应仪表板,我正在使用Redux。当收到新数据时,会触发一个动作来更新所有相关组件,虽然我不确定我这样做的方式是正确的。

这是我监控来自服务器的新传入数据的方法:

  socket.on('incidents', state => {
    boundActionSetIncidentsList(state);
  });

这是在新数据上调用的有界动作创建者:

  import { store } from '../index';

  export function boundActionSetIncidentsList(incidents) {
    store.dispatch(actionSetIncidentsList(incidents));
  }

我需要商店才能发送操作,因为您可以看到我残酷地从主index.js导入它。这就是它的创建方式:

  export const store = createStore();

作为反应和redux的新手,我想知道什么是不是从容器或表示组件触发的调度操作的redux方式。谢谢!!

2 个答案:

答案 0 :(得分:2)

您可以将设置套接字侦听器的代码包装为将存储作为参数的函数。因此,至少您的客户端主程序可以设置存储,并在准备就绪时将其传递给套接字侦听器。

您也可以尝试使用库来提供帮助。这是一些redux中间件,它可以在服务器发送数据时自动将操作分配到存储中:

https://github.com/itaylor/redux-socket.io

答案 1 :(得分:2)

一般建议是在Redux中间件(可以访问商店的dispatch方法)或在组件装载/卸载时处理套接字的React组件中管理套接字连接并且可以使用React-Redux connect函数来访问dispatch(或预绑定动作创建器以用于套接字事件)。