Задать вопрос
@LoveCodeandCoffe

Как бороться с утечкой памяти при использовании UseEffect?

Ббьюсь уже не первый день но не получается разобраться . Есть внешняя функция которая (async) которая выполняет другую функцию (async, эта функция общается с api). далее я хочу чтобы 1 функция, выполнялась при старте ( в идеале еще и при изменении параметров, но это я организовал, через прокидование c allback функции дочерним компонентам)
UseEffect просит, пожалуйста не сунь в меня асинхронную функцию, окей смотрю как люди делаю на стаковерфлоу и на разных тематических порталах. Можно эту функцию сделать внешней, в качестве 2 параметра передать либо пустой массив, тогда функция выполниться 1 раз, либо с параметрами . Но все это у меня не решает проблему размонтирования компонента. Проявляется она таким образом, я пишу админку. И когда я перехожу на таб с таблицей сотрудников, у меня срабатывает функция в useeffect и грузятся с jsonserverа пользователи все ок. Но периодически выскакивет ошибка реакта
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

Часто такое происходит когда, например не дождался загрузки пользователей в таблицу а свалил на другой таб. Может кто подскажет, как решать такую проблему?
const [loading, setLoading] = useState(false)
  useEffect(() => {
    UpdateStoreifChildChange(loading)
  }, [loading])
  useEffect(() => {
    UpdateStoreifChildChange(loading)
  }, [])

  async function UpdateStoreifChildChange(flag) {
    setLoading(true)
    try {
      await asyncGetDataAndUpdateStore(GET_FETCH_EMPLOYEES, SET_NEW_STORE)
    } catch (e) {
      setError(e.message || 'Unexpected error')
    }
    setLoading(false)
  }
  • Вопрос задан
  • 1103 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
из useEffect можно вернуть функцию которая будет вызвана при размонтировании компонента.
Дальше в ней вы делаете все что нужно чтобы почистить память, отменить запросы и так далее.
Если запросы "неотменяемые" то при размонтировании помечаете где-нибудь что данные уже не нужны, и при окончании запроса и получении данных просто ничего не делаете
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@LoveCodeandCoffe Автор вопроса
UseEffect просит, пожалуйста не сунь в меня асинхронную функцию

Похоже я уже, не соображаю, и вроде как передаю саму асинхронную функцию в хук, ну окей если обернуть эту функцию в еще 1 функцию уже не async ошибка не куда не уходит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽