Я пытаюсь создать свое первое промежуточное ПО Redux для обработки постоянного соединения Socket.IO с сервером чата. Приложение Redux должно создавать соединение Socket.IO только после того, как пользователь вошел в систему. store.user.id
в хранилище Redux не равно null
, если пользователь вошел в систему.
Вопрос: Как можно создать соединение Socket.IO только тогда, когда пользователь вошел в систему, и отключиться от него, когда пользователь вышел из системы?
В приведенном ниже примере кода соединение Socket.IO выполняется немедленно.
import io from 'socket.io-client';
const chatMiddleware = () => {
return store => {
// HOW TO Connect to socketio server only after being logged in?
const socket = io('http://localhost:3002');
socket.on('connect', () => {
console.log('Connected to chat server.');
socket.emit('msg', 'hello world!');
});
return next => action => {
if (action.type == SEND_MESSAGE) {
console.log('middleware intercepted SEND_MESSAGE')
socket.emit('msg', action.payload);
return;
}
return next(action);
}
}
}
export default chatMiddleware
Системная среда
- react-dom@16.13.1
- react-redux@7.2.0
- react@16.13.1
- redux@4.0.5
- Узел v14.0.0