You attempted to set the key `port` with the value `8883` on an object that is meant to be immutable and has been frozen

Как исправить данную ошибку.

You attempted to set the key port with the value 8883 on an object that is meant to be immutable and has been frozen

Получаю ее после того как пытаюсь повторно создать клиента для MQTT подключения. Что использую: react-native, а для mqtt подключения данную библиотеку sp-react-native-mqtt. Отлаживаю пока только на андроид устройстве.

Работает это так:

  1. Открываю экран => запрос к REST API
  2. Получаю конфигурацию => создаю MQTT клиента
  3. Подключаю MQTT клиента
  4. Обмен сообщениями РАБОТАЕТ
  5. Нажимаю на кнопку назад в хедере => Обрабатывается отключение/удаление MQTT клиента
  6. Переключаюсь на другой экран, где должен подключиться снова MQTT клиент
  7. отправка (publish) => выдает эту ошибку

Насколько я понимаю, что существует некая сущность с ключом port, которая не может быть перезаписана при инициализации нового клиента.
Где она находится и как ее обработать?


Ответы (1 шт):

Автор решения: Dmitry

Вопрос решен.
Первое - я отказался от использования sp-react-native-mqtt и написал собственную реализацию для paho js mqtt клиента

Второе - использовал возможности useEffect-хука. Хук включает в себя возможность использования следующую конструкцию

useEffect(() => {
    function do_smth() {
    }

    return () => {
      // здесь можно очистить все хандлеры в том числе и относящиеся к mqtt клиенту
    };
  });

Для сброса клинта mqtt или просто вызвать unsubscribe для определенных топиков и т.д. при переключении между экранами

→ Ссылка