【问题标题】:Is Middleware required to use web sockets in React Redux Application在 React Redux 应用程序中使用 Web 套接字是否需要中间件
【发布时间】:2018-02-28 19:50:38
【问题描述】:

我正在尝试实现基于套接字的 react(redux) 应用程序。必须将套接字事件分派到商店,以便减速器对其采取行动。 现在我认为的方式是将存储保存在一个文件中并从 Socket events File 中引用该文件,并且每当收到套接字消息时,都会发出一个事件以通过 socket.dispatch 进行存储

在 store.js 中

import { createStore } from 'redux';
let store = createStore(appStore);
export default store

在 SocketJs 文件中

   import store from './store';
   import io from socketio.client;

   let Socket = {
      createSocketIoConnection = function(){
        var socket = io(url, {reconnection: false, transports: ['websocket']});
        socket.on('data', this.emitToStore);  

      },
      emitToStore: function(data){
        store.dispatch();
      }

   }

在作为道具传递给提供者的主文件广告中使用相同的商店

import store from './store';
<Provider store={store}>
  <App> ...
</Provider>

这里我没有使用任何中间件。这是一个正确的方法吗?

【问题讨论】:

  • 看起来不错,但架构决策没有单一的答案。

标签: reactjs sockets websocket redux react-redux


【解决方案1】:

不,你没有使用中间件,但是中间件是正确放置这种行为的地方。其实many existing websocket middlewares you can use已经有了。

【讨论】:

  • 我已经浏览了您提供的链接以及 redux 文档页面。我在这里没有得到中间件的用途。感谢您的回复..在这个用例中似乎有点复杂化了一个简单的行为。 redux 站点(记录器、崩溃报告)给出的中间件示例允许在跨应用程序触发的所有操作上调用中间件函数,但在我的情况下,套接字事件处理程序不必这样做。它就像一个简单的事件发射器来存储。有什么想法吗?
  • 中间件充当了一个漏洞,您可以在其中执行异步代码并仍然与商店进行交互。这使它们成为保持持久连接(如 websockets)的理想场所。您可以通过向中间件拦截的 store 发送 action 来向 websocket 发送消息,并且您可以将从 websocket 接收到的消息转换为 Redux 动作。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2020-05-22
  • 2019-08-28
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
相关资源
最近更新 更多