大多数核心 Web 框架并未提供一种全面的数据获取或更新方案。因此,开发者最终要么构建封装了严格数据获取规范的元框架,要么自行发明数据获取方式。这通常意味着拼凑基于组件的状态和副作用,或是使用更通用的状态管理库来存储并提供应用中的异步数据。
虽然大多数传统状态管理库非常适合处理客户端状态,但它们在处理异步或服务端状态时表现欠佳。这是因为服务端状态完全不同。首先,服务端状态:
一旦理解了应用中服务端状态的本质,更多挑战将接踵而至,例如:
如果您没有被这个清单吓到,那一定意味着您已经解决了所有服务端状态问题并值得嘉奖。然而,如果您像绝大多数人一样,那么您要么尚未解决全部或大部分挑战,而我们才刚刚触及表面!
TanStack Query 无疑是管理服务端状态的最佳库之一。它开箱即用,零配置就能表现出色,并且可以随着应用增长按需定制。
TanStack Query 让您能够战胜和克服服务端状态的各种棘手挑战,在应用数据控制您之前掌控它们。
从技术角度而言,TanStack Query 很可能:
当在查询中使用 suspense 或 throwOnError 时,您需要一种方式让查询知道在发生错误后重新渲染时您想重试。通过 QueryErrorResetBoundary 组件,您可以重置组件边界内的任何查询错误。
import { QueryErrorResetBoundary } from '@tanstack/react-query'
import { ErrorBoundary } from 'react-error-boundary'
const App = () => (
<QueryErrorResetBoundary>
{({ reset }) => (
<ErrorBoundary
onReset={reset}
fallbackRender={({ resetErrorBoundary }) => (
<div>
There was an error!
<Button onClick={() => resetErrorBoundary()}>Try again</Button>
</div>
)}
>
<Page />
</ErrorBoundary>
)}
</QueryErrorResetBoundary>
)
import { QueryErrorResetBoundary } from '@tanstack/react-query'
import { ErrorBoundary } from 'react-error-boundary'
const App = () => (
<QueryErrorResetBoundary>
{({ reset }) => (
<ErrorBoundary
onReset={reset}
fallbackRender={({ resetErrorBoundary }) => (
<div>
There was an error!
<Button onClick={() => resetErrorBoundary()}>Try again</Button>
</div>
)}
>
<Page />
</ErrorBoundary>
)}
</QueryErrorResetBoundary>
)