Я новичок в этой технологии React-Redux, и мне бы хотелось, чтобы ваша помощь была с некоторой реализацией.
Я хочу реализовать одно приложение чата с сокетами (socket.io). Во-первых, пользователь должен зарегистрироваться (я использую паспорт на стороне сервера), а после того, как если регистрация завершена, пользователь должен подключиться к webSocket.
Я думал, что лучше всего использовать промежуточное программное обеспечение, такое как канал для всех действий, и в зависимости от того, какое действие получает промежуточное ПО, делать разные вещи.
Если тип действия AUTH_USER
, создайте соединение клиент-сервер и настройте все события, которые будут поступать с сервера.
Если тип действия MESSAGE
, отправьте на сервер сообщение.
Фрагменты кода:
----- socketMiddleware.js ----
import { AUTH_USER, MESSAGE } from '../actions/types';
import * as actions from 'actions/socket-actions';
import io from 'socket.io-client';
const socket = null;
export default function ({ dispatch }) {
return next => action => {
if(action.type == AUTH_USER) {
socket = io.connect(`${location.host}`);
socket.on('message', data => {
store.dispatch(actions.addResponse(action.data));
});
}
else if(action.type == MESSAGE && socket) {
socket.emit('user-message', action.data);
return next(action)
} else {
return next(action)
}
}
}
------ index.js -------
import {createStore, applyMiddleware} from 'redux';
import socketMiddleware from './socketMiddleware';
const createStoreWithMiddleware = applyMiddleware(
socketMiddleware
)(createStore);
const store = createStoreWithMiddleware(reducer);
<Provider store={store}>
<App />
</Provider>
Что вы думаете об этой практике, это лучшая реализация?