TanStack Query(前称 React Query)通常被描述为 Web 应用程序中缺失的数据获取库,但更技术性地说,它使在您的 Web 应用程序中获取、缓存、同步和更新服务器状态变得轻而易举。
大多数核心 Web 框架没有提供一种固执己见的方式来整体地获取或更新数据。因此,开发人员最终构建了元框架(其中封装了关于数据获取的严格意见),或者他们发明了自己的数据获取方式。这通常意味着拼凑基于组件的状态和副作用,或者使用更通用的状态管理库来存储和提供整个应用程序的异步数据。
虽然大多数传统状态管理库非常适合处理客户端状态,但它们不太擅长处理异步或服务器状态。这是因为服务器状态完全不同。首先,服务器状态
一旦您掌握了应用程序中服务器状态的性质,随着您的深入,甚至会涌现出更多挑战,例如
如果您没有被这个列表吓倒,那么这一定意味着您可能已经解决了所有服务器状态问题,并且应该获得奖励。但是,如果您像绝大多数人一样,那么您要么尚未解决所有或大部分这些挑战,而我们才刚刚开始触及皮毛!
TanStack Query 绝对是管理服务器状态的最佳库之一。它开箱即用,零配置,并且可以自定义以满足您的喜好,随着您的应用程序的增长。
TanStack Query 允许您战胜和克服服务器状态的棘手挑战和障碍,并在您的应用数据开始控制您之前控制它。
从更技术的角度来看,TanStack Query 可能会
在下面的示例中,您可以看到 TanStack Query 以其最基本和最简单的形式被用于获取 TanStack Query GitHub 项目本身的 GitHub 统计信息
import {
QueryClient,
QueryClientProvider,
useQuery,
} from '@tanstack/react-query'
const queryClient = new QueryClient()
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<Example />
</QueryClientProvider>
)
}
function Example() {
const { isPending, error, data } = useQuery({
queryKey: ['repoData'],
queryFn: () =>
fetch('https://api.github.com/repos/TanStack/query').then((res) =>
res.json(),
),
})
if (isPending) return 'Loading...'
if (error) return 'An error has occurred: ' + error.message
return (
<div>
<h1>{data.name}</h1>
<p>{data.description}</p>
<strong>👀 {data.subscribers_count}</strong>{' '}
<strong>✨ {data.stargazers_count}</strong>{' '}
<strong>🍴 {data.forks_count}</strong>
</div>
)
}
import {
QueryClient,
QueryClientProvider,
useQuery,
} from '@tanstack/react-query'
const queryClient = new QueryClient()
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<Example />
</QueryClientProvider>
)
}
function Example() {
const { isPending, error, data } = useQuery({
queryKey: ['repoData'],
queryFn: () =>
fetch('https://api.github.com/repos/TanStack/query').then((res) =>
res.json(),
),
})
if (isPending) return 'Loading...'
if (error) return 'An error has occurred: ' + error.message
return (
<div>
<h1>{data.name}</h1>
<p>{data.description}</p>
<strong>👀 {data.subscribers_count}</strong>{' '}
<strong>✨ {data.stargazers_count}</strong>{' '}
<strong>🍴 {data.forks_count}</strong>
</div>
)
}