【发布时间】:2021-02-23 23:27:31
【问题描述】:
我有一个作为项目列表的母版页,以及一个用于获取和更新项目的详细信息页面。我有以下基于 react-query 库的钩子:
const useItems = (options) => useQuery(["item"], api.fetchItems(options)); // used by master page
const useItem = id => useQuery(["item", id], () => api.fetchItem(id)); // used by details page
const useUpdateItem = () => {
const queryClient = useQueryClient();
return useMutation(item => api.updateItem(item), {
onSuccess: ({id}) => {
queryClient.invalidateQueries(["item"]);
queryClient.invalidateQueries(["item", id]);
}
});
};
UpdatePage 组件有一个表单组件,它接受一个 defaultValue 并将其加载到它的本地“草稿”状态 - 所以在这方面它有点“不受控制”,我不提升草稿状态。
// UpdatePage
const query = useItem(id);
const mutation = useUpdateItem();
return (
{query.isSuccess &&
!query.isLoading &&
<ItemForm defaultValue={query.data} onSubmit={mutation.mutate} />
}
);
问题是我更新后,转到母版页面,然后返回详细信息页面,“defaultValue”在查询完成之前获取旧项目。我确实看到它击中了网络中的 API,并且新的价值又回来了,但为时已晚。重新查询数据后如何只显示ItemForm?还是有更好的模式?
【问题讨论】:
标签: javascript reactjs react-query