Хранение WebSocket-соединения в React Native: как избежать пересоздания при ререндере

    Переделываю чат на React Native. В приложении используется навигатор, и присутствует множество экранов, в том числе не связанных с чатом. Возникает вопрос: куда поместить созданное WebSocket-подключение, чтобы оно не пересоздавалось при каждом ререндере? Как правильно организовать эту логику?

    Сейчас при получении сообщения обработчик изменяет поля стора в MobX. Само подключение также хранится в поле стора и оттуда же изменяет поля. Всё работает, но возникает ощущение, что хранить сокет в сторе - не лучшая практика.

    Предлагаемые решения

    • Создать отдельный класс или синглтон со статическим полем для хранения экземпляра WebSocket, чтобы он был доступен из любого модуля без привязки к MobX.
    • Использовать контекст React (Context API) для управления жизненным циклом сокета - это позволит избежать пересоздания при ререндере.
    • Вынести логику сокета в отдельный сервис, который будет вызывать методы MobX для обновления данных, но сам не храниться в сторе.

    Оптимальный вариант - создать класс SocketService с синглтоном, который управляет соединением, а при получении сообщения дергает MobX-стор для обновления полей. Это разделяет ответственность и делает код чище.