Бесконечный крючок l oop useEffect () - PullRequest
0 голосов
/ 23 апреля 2020

Итак, я использую хук useState ():

const [dailyData, setDailyData] = useState({});

И хук useEffect () для получения данных из API:

 useEffect(() => {
    const fetchAPI = async () => {
        setDailyData(await fetchDailyData())
    }

    console.log(dailyData)

    fetchAPI();
});

Но проблема в том, что эти запросы бесконечный.

Я новичок в React, поэтому было бы здорово, если бы вы объяснили, почему это вызвано.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Ваш useEffect срабатывает при обновлении любых данных о состоянии.

Таким образом, если вы обновите dailyData внутри вашего useEffect, изменение состояния снова вызовет useEffect.

Вы можете добавить массив зависимостей для useEffect или любой переменной-флага для правильных действий .

Например, добавление пустого массива зависимостей будет работать как componentDidMount.

useEffect(() => {
    // Do something here
}, []);
0 голосов
/ 23 апреля 2020

Чтобы использовать useEffect только один раз, вам нужно дать пустой массив в функции useEffect

useEffect(() => {
    const fetchAPI = async () => {
        setDailyData(await fetchDailyData())
    }

    console.log(dailyData)

    fetchAPI();
},[]);

Если вы хотите запускать useEffect при возникновении каких-либо изменений, вы можете указать значение в массиве и всякий раз, когда произойдет любое изменение в переменной, которую useEffect будет запущен снова.

0 голосов
/ 23 апреля 2020

Ваш useEffect нуждается в зависимости массива ex.

useEffect(() => {
 const fetchAPI = async () => {
    setDailyData(await fetchDailyData())
 }

 console.log(dailyData)

 fetchAPI();
}, []);
...