Redux Middleware: устанавливайте Socket.IO соединение только после входа в систему - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь создать свое первое промежуточное ПО 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
...