У меня есть приложение реагирования, которое использует 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: _,
});
});
}
}
Спасибо.