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

Почему React ждет пока загрузятся данные?

useFetch.js
export const useFetch = () => {
  const [loading, setLoading] = useState(true)
  const [data, setData] = useState([])
  const getProducts = async () => {
    const response = await fetch(url)
    const data = await response.json();
    setData(paginate(data));
    setLoading(false);
  };
 useEffect(() => {
    getProducts()
  }, [])
  return { loading, data }
}


utils.js
const paginate = (followers) => {

    const itemsPerPage = 9;
    const pages = Math.ceil(followers.length / itemsPerPage) ;
    return  Array.from({length:pages}, (_, index) => {
        const start = index * itemsPerPage;
        return followers.slice(start, start + itemsPerPage)
    });

}

export default paginate


App.js
import paginate from "./utils";
function App() {
  const {loading, data} = useFetch();
  const [page, setPage] = useState(0);
  const [followers, setFollowers] = useState([]);
useEffect(()=>{
    if(loading) return;
    setFollowers(data[page])
},[loading])


Подскажите пожалуйста, почему React в этом случае ждет пока закончится loading? Казалось бы увидел, что loading = true, вышел из useEffect и вылетел с ошибкой, что данных нет. useEffect срабатывает при изменение loading, но почему программа не выполняется дальше, пока loading не станет false?
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
insighter
@insighter
-First time? - Huh? (C#, React, JS)
const {loading, data} = useFetch();

loading само по себе не поменяется, App никогда не получит уведомление, что данные загрузились

Передавай в свой хук что то вроде onLoad колбека
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽