在實踐中有幾個策略,可用於在終極版基礎上socket.io開關:
首先,在中間件的形式準備的決策,例如https://www.npmjs.com/package/redux-socket.io
其次,有可能更簡單,更狡猾。在創建redux store和saga時,同時還可以創建socket.io所需的客戶端實例,並進一步實現功能閉包的邏輯。
以下示例完全覆蓋您的案例。只需設置MESSAGES_MAP
映射與應映射到Redux操作的事件的名稱即可。
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware, compose } from 'redux';
import socketIO from 'socket.io-client';
import YourRootContainter from './YourRootContainter';
const MESSAGES_MAP = {
'MESSAGE_1': 'REDUX_ACTION_1',
'MESSAGE_2': 'REDUX_ACTION_2'
};
Promise.resolve(createSagaMiddleware()).then(saga => ({
store: (compose(applyMiddleware(saga))(createStore))(
YOUR_REDUCER,
YOUR_INITIAL_STATE
),
socketClient: socketIO(YOUR_SOCKET_URL, {
path: YOUR_EXCHANGE_URL_PATH
}),
saga
})).then(({ saga, store, socketClient }) => (
Object.keys(MESSAGES_MAP).forEach(name => (
socketClient.on(name, event => store.dispatch({
type: MESSAGES_MAP[name],
payload: { ...event }
}))
)),
saga.run(YOUR_SAGA_ENTRY_POINT),
store
)).then(store => render(
(<Provider store={store}>
<YourRootContainter />
</Provider>),
document.getElementById('root')
));
歡迎來到Stackoverflow!你會在這裏得到很好的答案,但請提供一些更多的信息,你到目前爲止嘗試過。最重要的是,鏈接這裏的一些代碼(最好是一個小提琴/ bin/pen)。 – Alp