我设法让它发挥作用,但我认为这不是一个好的解决方案。
我的主要文件是:
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, hashHistory } from 'react-router';
import { Provider } from 'react-redux';
import routes from './router/routes';
import store from './store.js';
ReactDOM.render(
<Provider store={ store }>
<Router routes={ routes } history={ hashHistory } />
</Provider>,
document.getElementById('wrap')
);
我的store.js是:
import { createStore } from 'redux';
import reducer from './reducers/index';
import initialState from './reducers/initial-state';
import connection from './lib/connection';
const store = createStore(reducer, initialState);
connection(store);
export default store;
和连接是:
import AppActions from '../actions/AppActions';
import io from 'socket.io-client';
export default function (store) {
const mainsocket = io.connect('$socketurl');
mainsocket.store = store;
mainsocket.actions = AppActions;
var socket;
mainsocket.on('namespaceinitialized', function(data) {
socket = io.connect("$socketurl/$namespace", {'autoConnect': false,'forceNew': true});
socket.connect();
socket.store = store;
socket.actions = AppActions;
socket.on('connect',function (data) {
//need store and actions
});
});
}
如您所见,我正在使用2个连接,首先是命名空间初始化,然后是第二个(这个问题并不重要)。
我不喜欢这种“脏”的解决方案,我将存储和操作附加到mainsocket对象,然后将它们从mainsocket传递到socket,以便能够访问套接字消息上的app动作,问题是什么是正确的方法?
此外在这个代码套接字连接之前app动作和商店已初始化,我想套接字连接是最后一件事但我不知道在哪里放呢?
我必须说我不是在编写自己的应用程序,而是在现有的开源应用程序中添加功能。
谢谢。