javascript - 如何在组件外调度 redux Action ?

标签 javascript reactjs react-native redux

我在我的 react-native 移动应用程序中使用 redux
与后端的通信是通过使用 socket.io 的 websockets 进行的。

我组织项目的方式是我有一个文件(你可以称它为对象)来初始化套接字客户端。
处理程序已注册到它,我想将操作发送到 reducers

socket.js:

export function createSocket (url) {
  console.log(`connecting to ${url}`)
  // dispatch(actions.CONNECT)
  return io(url)
}

如何从任何 React 组件 之外的那些函数调度 操作?

最佳答案

如果您在启动时初始化套接字客户端,只需将您的 redux 存储传递到函数中,然后使用 store.dispatch()

export function createSocket (url, store) {
  console.log(`connecting to ${url}`)
  store.dispatch(actions.CONNECT)
  return io(url)
}

如果不是在启动时,那么你的套接字创建应该由一些用户操作(或类似的东西)触发,在这种情况下你应该能够使用 redux-thunk 获得对调度函数的引用> 中间件:

//the action returns a function, which gets called with store.dispatch as an argument
const myAction = someArg => dispatch => {
    createSocket(url, dispatch);
};

参见 https://github.com/reduxjs/redux-thunk详情

关于javascript - 如何在组件外调度 redux Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50787747/

相关文章:

javascript - 具有过滤/显示表格部分的代码。想知道如何将整个表格作为一个表格进行过滤吗?

javascript - 输入字段上的 Angular ng-blur 不起作用

react-native - react 原生 inlineImageLeft 值

css - 将文本框放在图像顶部

android - 将 React Native 代码集成到现有的 android 项目中

javascript - AngularJS 中的日期时间格式

javascript - vb .net,涉及严格模式的javascript问题

javascript - 我已经使用 webpack 生成了bundle.js,但我的 React 应用程序继续使用/static/bundle.js

javascript - 神秘 react 错误 "unstable_flushDiscreteUpdates: Cannot flush updates when React is already rendering."

node.js - 如何使用 Axios 从 React 发送数据并在 express 中使用请求主体?