2017-07-05 40 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