2017-07-05 42 views
2

我建立一个小型的聊天应用程序使用反应,redux,socketio和节点与猫鼬。正常情况下,redux会通过动作(使API调用和接收数据)流动并分派数据。但在我的情况下,套接字将发射到某个事件,但它不会返回数据,直到我们手动发射来自后端的数据。所以为了实现合适的redux流,我应该添加一个套接字事件来检索数据(来自后端),然后调度它或者有没有其他适当的方法来实现这一点?使用socketio与反应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)); 
       }); 


    }; 

}; 

回答

0

这似乎完全合理的,我的示例代码。我会建议使用此这样的thunk的“额外的参数”你的组件不需要知道实际的Socket对象:

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)) 
    }) 
    } 
+0

这给出了一个错误'遗漏的类型错误:无法读取属性undefined' – TRomesh

+0

“发射”你是否应用了额外的参数(套接字)?当你应用中间件?你在哪里初始化套接字? – azium

+0

是的,我在商店中初始化它,我们应用中间件 – TRomesh