使用socketio与反应redux

我build立一个小型的聊天应用程序使用反应,redux,socketio和节点与mongoose。 正常情况下,redux通过动作(使API调用和接收数据)stream动并分派数据。 但在我的情况下,套接字将发射到某个事件,但它不会返回数据,直到我们手动发射来自后端的数据。 所以要实现合适的reduxstream程,我应该添加一个套接字事件来检索数据(来自后端),然后调度它或有任何其他适当的方式来实现这一点?

这里是我打算在Actions文件中做的一个示例代码

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)); }); }; }; 

这对我来说似乎是完全合理的。 我build议使用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)) }) }