@Res1dentEvil

Как убрать предупреждение?

Подскажите плз, как убрать предупреждение?

61a92878aaeb8165377540.png

Использую useEffect

useEffect(() => {
        getTodo()
    }, [getTodo])


и функцию getTodo

const getTodo = useCallback(async () => {
        try {
                await axios.get('/api/todo', {
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    params: {userId}
                })
                    .then((response) => {
                        setTodos(response.data)
                    })
        } catch (error) {
            console.log(error)
        }
    }, [userId, setTodos])


Есть, вроде как, решение похожей ситуации. https://habr.com/ru/post/493496/
Но, видимо, я делаю что-то не так, потому убрать ошибку так и не смог.
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 2
Devilz_1
@Devilz_1
Frontend-Developer
Самое главное забыли из примера добавить - функцию очистки. Вам же ошибка об этом и говорит. Очистить useEffect перед размонтированием компонента.

в свой useEffect в самом начале опишите переменную, и присвойте значение false
let cleanupFunction = false;

а в самом конце добавьте возврат колбэка, этот колбэк сработает перед тем, как размонтируется компонент.
return () => cleanupFunction = true;
Ответ написан
IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности
useEffect(() => {
  let stopGettingAfterUnmount = false;

  const getTodo = async () => {
    await axios
      .get("/api/todo", {
        headers: {
          "Content-Type": "application/json",
        },
        params: { userId },
      })
      .then((response) => {
        if (stopGettingAfterUnmount) return;

        setTodos(response.data);
      });
  };

  getTodo();

  return () => {
    stopGettingAfterUnmount = true;
  };
}, [userId]);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы