我主要使用SWR获取数据,但是我遇到了需要更新数据的情况。问题在于,我需要一个指示器来表明这个请求正在进行中,类似于isLoading
标志。文档中建议使用如下代码:
const isLoading = !data && !error;
当然,在更新(变异)data
时,数据仍然存在,因此该标志始终为false
。与isValidating
标志相同:
const { isValidating } = useSWR(...);
这个标志在突变正在进行时不会改变,只有当它完成并开始 GET
请求时才会改变。
问题
有没有办法知道我的 PUT
是否正在加载?注意:我不想使用状态中的任何字段,因为它不像 SWR 数据那样被共享。也许在我的 SWR 代码方面出了些问题?
const fetcher = (url, payload) => axios.post(url, payload).then((res) => res);
// ^^^^^ its POST but it only fetches data
const updater = (url, payload) => axios.put(url, payload).then((res) => res);
// ^^^^^ this one UPDATES the data
const useHook = () => {
const { data, error, mutate, isValidating } = useSWR([getURL, payload], fetcher);
const { mutate: update } = useSWRConfig();
const updateData = () => {
update(getURL, updater(putURL, payload)); // update data
mutate(); // refetch data after update
};
return {
data,
updateData,
isValidating, // true only when fetching data
isLoading: !data && !error, // true only when fetching data
}
编辑:如果有其他人遇到相同的问题......没有找到解决方法,所以转换为react-query
。拜拜SWR。