нужно подписаться на событие сокета и передать туда хэндлер. Я делаю это в useEffect-е куда передаю в депсы одно значение т.к только они нужны для подписки. В нем возвращаю коллбэк который отписывается от события сокета. И теперь представьте что в хэндлере вы делаете какую-то работу для которой вам нужны данные из Redux Store которые могут меняться в процессе работы приложения и их может быть условно 10, и вам по хорошему нужно иметь самые свежие значения. И вот вопрос: где и как создавать этот хэндлер? В useEffect-е в котором вы подписываетесь? Но мне это не особо подходит, потому что значения которые используются в хэндлере придется записать в депсы useEffect-а и у меня при каждом изменении будет подписка/переподписка.
Создаёшь класс, который скрывает работу с сокетами и отдаёт точечные методы для конкретных подписок, внутри логика «подписаться на сокет, если есть хотя бы один подписчик, отписаться, если нет ни одного», класс в контекст и дальше как и раньше в useEffect бахаешь подписки useEffect(() => myEvents.ofTodoAdded({ foo, bar }, item => …), [myEvents, foo, bar])
Обсуждают сегодня