import React, { useEffect, useState } from "react"; import Loader from "../components/Loader"; import axios from "../utils/axios"; export default function Todos(props) { let tag = props.selectedTag; let lastFetchedTag = props.mainState ? props.mainState.tag : null; const [type, setType] = useState( props.mainState ? props.mainState.type : "unanswered" ); const [order, setOrder] = useState( props.mainState ? props.mainState.order : "desc" ); const [page, setPage] = useState(props.mainState ? props.mainState.page : 1); const [data, setData] = useState( props.mainState ? props.mainState.results : null ); const [isDataFetched, setIsDataFetched] = useState( props.mainState && tag === props.mainState.tag ); let isDataFetching = false; function fetchData() { if ( (lastFetchedTag === tag && props.mainState.type === type && props.mainState.order === order && props.mainState.page == page) || isDataFetching ) { return; } isDataFetching = true; setIsDataFetched(false); let request_page = page; if ( lastFetchedTag && (lastFetchedTag !== tag || props.mainState.type !== type || props.mainState.order !== order) ) { request_page = 1; setPage(1); } axios .get(`questions/${type}`, { params: { order, tagged: tag, sort: "creation", page: request_page, }, }) .then((response) => { setData(response.data); setIsDataFetched(true); lastFetchedTag = tag; props.updateMainState({ tag: tag, type: type, order: order, page: request_page, results: response.data, }); isDataFetching = false; }); } useEffect(async () => { if (tag) { await fetchData(); } }, [tag, type, order, page]); return tag ? (