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

React Query 如何在多个组件中访问查询结果?

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

1个答案

1

在React Query中,访问查询结果可以跨多个组件共享和同步。React Query的设计原则之一就是能够使得数据获取过程变得简单且高效,尤其是在跨组件使用数据时。

要在多个组件中访问查询结果,通常你会使用useQuery这个hook。useQuery通过一个唯一的键来获取和缓存数据,这样,任何使用同样键调用useQuery的组件都可以访问到相同的查询结果和状态。

这是一个基本的使用useQuery的例子:

jsx
import { useQuery } from 'react-query'; const fetchUserData = async (userId) => { const response = await fetch('/api/user/' + userId); if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }; function UserProfile({ userId }) { const { data, isLoading, error } = useQuery(['user', userId], () => fetchUserData(userId), { // 可以在这里添加其他选项,例如 staleTime, cacheTime等。 }); if (isLoading) return 'Loading user...'; if (error) return 'An error has occurred: ' + error.message; // render data return ( <div> <h1>{data.name}</h1> <p>Email: {data.email}</p> // ...其他用户信息 </div> ); }

如果我们在应用的另一部分也需要使用到同样用户的数据,我们可以在新的组件中使用相同的useQuery

jsx
function UserPosts({ userId }) { const { data, isLoading, error } = useQuery(['user', userId], () => fetchUserData(userId)); // 同样的处理加载状态和错误状态的逻辑 // render user posts return ( // ... ); }

在这个例子中,不管UserProfileUserPosts是否在同一个页面或者不同页面,它们都能够通过相同的查询键(在这个例子中是['user', userId])获取到相同的用户数据。如果这些组件同时挂载,第一个请求完成后,第二个组件会立即从缓存中获取到数据,而不需要再发起一个新的请求。

React Query的缓存和同步机制确保了数据的一致性,并减少了不必要的网络请求,从而提高了应用的性能。

2024年6月29日 12:07 回复

你的答案