【发布时间】:2021-03-01 01:01:27
【问题描述】:
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;
上面的代码导致无限重新渲染?为什么? ????
一旦useQuery 与status === "success" 通信,为什么我不能只dispatch 并初始化我的数据?我应该怎么做呢? ????
我删除了useQuery,只是处理了useEffect,没有任何问题-数据回来了,我dispatched。
useQuery 有什么不同?
【问题讨论】:
标签: reactjs use-reducer react-query