【问题标题】:Using socketio with react redux将socketio与react redux一起使用
【发布时间】:2017-12-09 08:40:46
【问题描述】:

我正在使用 react、redux、socketio 和带有 mongoose 的节点构建一个小型聊天应用程序。通常,redux 流经操作(进行 API 调用和接收数据)并分派数据。但在我的情况下,套接字将发出某个事件,但在我们手动从后端发出数据之前它不会返回数据。因此,为了实现正确的 redux 流程,我应该在操作上添加一个套接字事件以检索数据(来自后端)然后调度它,还是有任何其他适当的方法来实现这一点?

这是我打算做的示例代码 操作文件

    function sendMessage(data) {
      return {
        type: SEND_MESSAGE,
        payload: data
      };
    }

    export const sendNewMessage = (socket,data) => {
         return dispatch => {
              socket.emit("send message",data);
              socket.on("new message",function(data){
                  dispatch(sendMessage(data));
               });


    };

};

【问题讨论】:

    标签: node.js reactjs socket.io react-redux


    【解决方案1】:

    这对我来说似乎完全合理。我建议为此使用 thunk 的“额外参数”,这样您的组件就不需要知道实际的套接字对象:

    const store = createStore(
      reducer,
      applyMiddleware(thunk.withExtraArgument({ socket }))
    )
    
    export const sendNewMessage = (data) =>
      (dispatch, getState, { socket }) => {
        socket.emit("send message", data)
        socket.on("new message", (data) => {
          dispatch(sendMessage(data))
        })
      }
    

    【讨论】:

    • 这给出了一个错误Uncaught TypeError: Cannot read property 'emit' of undefined
    • 您是否应用了额外的参数(套接字)?当你应用中间件?你在哪里初始化套接字?
    • 是的,我确实在我们应用中间件的商店中对其进行了初始化
    • 奇怪你用的是什么版本的 redux-thunk?你能粘贴你的初始化代码吗?
    • 能否也粘贴一下引发未定义错误的代码?
    猜你喜欢
    • 2019-02-05
    • 2018-12-05
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多