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

How to handle multiple mutations in parallel with react- query

4 个月前提问
4 个月前修改
浏览次数26

1个答案

1

在React Query库中,处理并行突变(mutations)可以简化后端数据更新操作的管理。React Query通过useMutation钩子来处理数据突变,而为了并行执行多个突变,我们可以同时触发多个useMutation

首先,我们需要安装并引入React Query库:

bash
npm install react-query

然后,我们可以通过以下步骤来实现并行突变:

步骤1: 创建突变函数

每个突变可能对应于不同的API调用。例如,假设我们有两个API函数:updateUserdeletePost,分别用于更新用户信息和删除帖子。

javascript
const updateUser = async (userData) => { const response = await fetch('/api/user/update', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(userData), }); if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }; const deletePost = async (postId) => { const response = await fetch(`/api/posts/${postId}`, { method: 'DELETE', }); if (!response.ok) { throw new Error('Network response was not ok'); } return postId; };

步骤2: 使用useMutation钩子

在组件中,我们可以使用useMutation钩子为每个API函数创建一个突变处理器。

javascript
import { useMutation, useQueryClient } from 'react-query'; const MyComponent = () => { const queryClient = useQueryClient(); const mutation1 = useMutation(updateUser, { onSuccess: () => { queryClient.invalidateQueries('userData'); } }); const mutation2 = useMutation(deletePost, { onSuccess: () => { queryClient.invalidateQueries('posts'); } }); // 函数用于并行执行突变 const handleMutations = async () => { try { const userUpdate = mutation1.mutateAsync({ userId: 1, name: 'Alice' }); const postDeletion = mutation2.mutateAsync(123); await Promise.all([userUpdate, postDeletion]); console.log('Both mutations completed successfully'); } catch (error) { console.error('Error in mutations', error); } }; return ( <div> <button onClick={handleMutations}>Update User and Delete Post</button> </div> ); };

在上述代码中,mutation1mutation2 分别处理用户更新和帖子删除。我们在handleMutations函数中通过mutateAsync方法加入了这两个突变,并使用Promise.all来确保它们并行执行。这种方法不仅简化了突变的管理,而且可以有效地利用网络资源,提高应用性能。

这样,我们就能有效并行处理多个突变操作,同时保持代码的清晰和可维护性。

2024年8月5日 11:02 回复

你的答案