我真的不知道如何问清楚,但我会先粘贴我的代码并在下面提问。
function useToDos() {
const queryCache = useQueryCache();
const fetchTodos = useQuery(
'fetchTodos',
() => client.get(paths.todos).then(({ data }: any) => data),
{ enabled: false }
);
const createTodo = async ({ name ) =>
await client.post(paths.todos, { name }).then(({ data }) => data);
return {
fetchTodos,
createTodo: useMutation(createTodo, {
onMutate: newItem => {
queryCache.cancelQueries('fetchTodos');
const previousTodos = queryCache.getQueryData('fetchTodos');
queryCache.setQueryData('fetchTodos', old => [
...old,
newItem,
]);
return () => queryCache.setQueryData('fetchTodos', previousTodos);
},
}),
};
}
如您所见,我正在尝试创建自己的自定义挂钩来包装反应查询功能。因此,我需要将我的fetchTodos
查询设置为禁用,这样它就不会立即运行。但是,这会破坏所有后台数据获取吗?
具体来说,当我运行createTodo
并onMutate
触发该方法时,理想情况下,我希望fetchTodos
在后台更新查询,以便更新前端的待办事项列表,而无需再次发出请求。但似乎最初将查询设置为禁用,后台更新不会生效。
因为我不认为将 react-query 钩子包装到自定义钩子库中是一个非常好的主意,所以我可能会对相同的设置有更多问题,但现在,我将从这里开始。谢谢你。