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?