Socket.io и реакция Router: как ссылаться на историю браузера и другие зависимости от обработчика сокетов? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть приложение реагирования, которое использует socket.io для взаимодействия с бэкэндом. Существует сценарий, когда серверная часть отправляет сообщение, которое вызывает изменение страницы. Есть ли способ ссылаться на историю реагирующих маршрутизаторов из обработчика без необходимости оборачивать все приложение в компонент обертки? Пожалуйста, см. Пример кода ниже.

Кроме того, у меня есть дополнительный вопрос относительно отправки ссылки. В настоящее время я держу сокет в состоянии App (я не использую Redux, но я реализовал очень простую хакерскую версию, используя useContext и useReducer). Поэтому, когда я подключаю сокет, я могу настроить обработчики для различных событий сокета и соответственно распределить действия. Однако я чувствую, что сокетное соединение не должно быть связано с состоянием приложения. Есть ли способ передать диспетчеризацию состояния приложения как зависимость без использования компонента-оболочки? В настоящее время я ссылаюсь на рассылку в компоненте следующим образом:

const { state, dispatch } = useContext(AppContext);

пример кода:

export function connectSocket() {

return async (dispatch) => {

const socket = await io.connect('', {
    path: '/socket.io/',
    secure: true,
    transports: ['websocket'],
  });

  socket.on('reconnect_attempt', () => {
    socket.io.opts.transports = ['polling', 'websocket'];
    socket.io.opts.pingTimeout = 30000;
  })


  // need to reference history here
  socket.on('nextpage', _ => {
       history.push('page');
  });

  // referencing dispatch
  socket.on('foo', _ => {
    dispatch({
      type: actionTypes.foo,
      payload: _,
    });
  });
}
}

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...