在实践中有几个策略,可用于在终极版基础上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