import api from "api";
import { Loader } from "components/base";
import { useReducer } from "react";
import { useQuery } from "react-query";
function reducer(state, { type, payload }) {
switch (type) {
case "init":
return state.concat(payload);
default:
throw new Error();
}
}
function Table() {
const [workers, dispatch] = useReducer(reducer, []);
const fetchWorkers = async () => {
const workersData = await api.index();
return workersData;
};
const { status, data, error } = useQuery("", fetchWorkers);
switch (status) {
case "loading":
return <Loader />;
case "error":
return <p className="text-red-600">{error.message}</p>;
case "success":
dispatch({ type: "init", payload: data });
return <p>Success!</p>;
default:
return <p></p>;
}
}
export default Table;
The above code causes infinite re-renders? Why?
Once useQuery
communicates that status === "success"
, why can't I just dispatch
and initialize my data? How else should I be doing this instead?
I removed useQuery
and just did with a useEffect
without any issue - the data came back and I dispatch
ed.
What is different here with useQuery
?