乐闻世界logo
搜索文章和话题

How do I update a single record in react-query outside of mutation?

6 个月前提问
5 个月前修改
浏览次数61

1个答案

1

在使用 React Query 时,通常的数据更新方式是通过 Mutations 来与后端进行交互,并自动更新或重新获取数据。不过,有时候我们也需要在不通过后端,即在客户端本地直接更新缓存中的数据。这种情况下,我们可以使用 React Query 的 queryClient.setQueryData 方法来实现。

使用 setQueryData 更新数据

setQueryData 方法允许你直接更新缓存中的数据。这样做的好处是可以即时反馈给用户,而不需要等待服务器响应。这对于优化用户体验特别有用。下面是如何使用这个方法的一个具体步骤:

  1. 确定要更新的数据的查询键(Query Key): 首先,你需要知道要更新哪个查询的缓存。每个使用 useQuery 或相关钩子的数据请求都有一个独特的查询键。

  2. 使用 setQueryData 方法更新数据: 你可以通过 queryClient 对象调用 setQueryData 方法,传入相应的查询键和新的数据或者一个更新数据的函数。

示例代码

假设我们有一个用于获取用户信息的查询,查询键为 ['user', userId],我们想在用户更新自己的昵称后立即更新这个数据。以下是如何操作的示例代码:

jsx
import { useQuery, useQueryClient } from 'react-query'; function UserProfile({ userId }) { const queryClient = useQueryClient(); const { data: user } = useQuery(['user', userId], fetchUserById); const updateUserNickname = newNickname => { // 更新后端数据 updateUserOnServer(userId, { nickname: newNickname }).then(updatedUser => { // 立即更新缓存中的用户数据 queryClient.setQueryData(['user', userId], updatedUser); }); }; return ( <div> <h1>{user?.nickname}</h1> <button onClick={() => updateUserNickname('新的昵称')}>更新昵称</button> </div> ); }

在这个例子中,我们首先通过后端 API 更新用户信息。一旦后端确认更新成功,我们就使用 setQueryData 方法立即更新缓存中的用户数据。这样,用户界面可以立即显示新的昵称,而不需要等待重新查询。

总结

使用 setQueryData 可以高效地在客户端直接更新 React Query 的缓存数据,这对于改善用户体验非常有用。这种方法特别适合那些对实时性要求较高的场景,可以减少服务器的压力和网络延迟带来的不便。

2024年6月29日 12:07 回复

你的答案