Задать вопрос
Ответы пользователя по тегу React Native
  • Бесконечный цикл useEffect?

    black1277
    @black1277
    Вольный стрелок
    Всё от того, что вы не желаете знать про жизненный цикл компонентов. Разберем по порядку, что происходит.
    1 компонент смонтировался
    2 срабатывает useEffect - он всегда срабатывает после того как готово DOM дерево.
    3 в useEffect срабатывает useState
    4 изменение состояния обязывает реакт сделать ререндер
    5 тут ключевой момент, компонент уже был смонтирован, поэтому происходит только его обновление - и вот тут useEffect ведет себя по разному. Если у него нет массива зависимостей - то он опять сработает и всё будет повторятся с 3-го пункта. Если же у него есть массив зависимостей - то он сработает только если после рендера обновления изменилось значение в этом массиве.
    Значит вам нужно как минимум указать newSendedMessage в этом массиве. НО! У вас есть и другая функция, которая изменяет стейт - sortMessages. Её тоже нужно указать в массиве зависимостей, если не хотите пропускать обновление при изменении receivedMsg. Но если просто поместить эту ф-ю в массив зависимостей - то опять получите бесконечный перерендер - потому что ф-я каждый раз будет разная (она пересоздается каждый раз во время обновления). Есть разные варианты как это исправить - или завернуть sortMessages в useCallback (у которого должен быть массив зависимостей с receivedMsg) или перенести саму ф-ю sortMessages внутрь useEffect и вызывать там. Тут вам решать какой вариант подходит логике вашего компонента больше.
    Ответ написан
    1 комментарий
  • React-native ошибка при попытке изменить состояние из дочернего компонента?

    black1277
    @black1277
    Вольный стрелок
    Не нужно передавать функцию изменения стейта по ссылке в другой компонент. Вместо этого сделайте внутри App функцию handler, внутри которой меняйте стейт, а в пропсы другого компонента передавайте эту самую ф-ю handler.
    Ответ написан
    Комментировать