@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?
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
insighter
@insighter
-First time? - Huh? (C#, React, JS)
const {loading, data} = useFetch();

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

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

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

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