挥舞双手,欢呼雀跃吧,因为 React Query 自带了专属的开发者工具!🥳
当你开始 React Query 之旅时,你会希望这些开发者工具常伴左右。它们有助于可视化 React Query 的所有内部工作,如果你遇到困难,很可能会为你节省数小时的调试时间!
对于 Chrome、Firefox 和 Edge 用户:有第三方浏览器扩展可用于直接在浏览器 DevTools 中调试 TanStack Query。这些扩展提供了与框架特定开发者工具包相同的功能
对于 React Native 用户:有一个第三方 macOS 原生应用可用于在任何基于 js 的应用程序中调试 React Query。实时监控设备间的查询。在此查看:rn-better-dev-tools
请注意,从第 5 版开始,开发者工具也支持观察突变。
开发者工具是一个单独的包,你需要安装它
npm i @tanstack/react-query-devtools
npm i @tanstack/react-query-devtools
或
pnpm add @tanstack/react-query-devtools
pnpm add @tanstack/react-query-devtools
或
yarn add @tanstack/react-query-devtools
yarn add @tanstack/react-query-devtools
或
bun add @tanstack/react-query-devtools
bun add @tanstack/react-query-devtools
对于 Next 13+ App Dir,您必须将其作为开发依赖项安装才能正常工作。
您可以像这样导入开发者工具
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
默认情况下,React Query Devtools 仅在 process.env.NODE_ENV === 'development' 时包含在 bundle 中,因此您无需担心在生产构建期间排除它们。
浮动模式将把开发者工具作为固定浮动元素挂载到您的应用中,并在屏幕角落提供一个切换按钮来显示和隐藏开发者工具。此切换状态将存储在 localStorage 中,并在重新加载时保留。
将以下代码尽可能放在您的 React 应用程序的顶部。它离页面根部越近,效果越好!
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
function App() {
return (
<QueryClientProvider client={queryClient}>
{/* The rest of your application */}
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
)
}
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
function App() {
return (
<QueryClientProvider client={queryClient}>
{/* The rest of your application */}
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
)
}
嵌入模式将在您的应用程序中以固定元素的形式显示开发工具,这样您就可以在自己的开发工具中使用我们的面板。
将以下代码尽可能放在您的 React 应用程序的顶部。它离页面根部越近,效果越好!
import { ReactQueryDevtoolsPanel } from '@tanstack/react-query-devtools'
function App() {
const [isOpen, setIsOpen] = React.useState(false)
return (
<QueryClientProvider client={queryClient}>
{/* The rest of your application */}
<button
onClick={() => setIsOpen(!isOpen)}
>{`${isOpen ? 'Close' : 'Open'} the devtools panel`}</button>
{isOpen && <ReactQueryDevtoolsPanel onClose={() => setIsOpen(false)} />}
</QueryClientProvider>
)
}
import { ReactQueryDevtoolsPanel } from '@tanstack/react-query-devtools'
function App() {
const [isOpen, setIsOpen] = React.useState(false)
return (
<QueryClientProvider client={queryClient}>
{/* The rest of your application */}
<button
onClick={() => setIsOpen(!isOpen)}
>{`${isOpen ? 'Close' : 'Open'} the devtools panel`}</button>
{isOpen && <ReactQueryDevtoolsPanel onClose={() => setIsOpen(false)} />}
</QueryClientProvider>
)
}
开发者工具在生产构建中被排除。然而,在生产环境中延迟加载开发者工具可能是有益的
import * as React from 'react'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
import { Example } from './Example'
const queryClient = new QueryClient()
const ReactQueryDevtoolsProduction = React.lazy(() =>
import('@tanstack/react-query-devtools/build/modern/production.js').then(
(d) => ({
default: d.ReactQueryDevtools,
}),
),
)
function App() {
const [showDevtools, setShowDevtools] = React.useState(false)
React.useEffect(() => {
// @ts-expect-error
window.toggleDevtools = () => setShowDevtools((old) => !old)
}, [])
return (
<QueryClientProvider client={queryClient}>
<Example />
<ReactQueryDevtools initialIsOpen />
{showDevtools && (
<React.Suspense fallback={null}>
<ReactQueryDevtoolsProduction />
</React.Suspense>
)}
</QueryClientProvider>
)
}
export default App
import * as React from 'react'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
import { Example } from './Example'
const queryClient = new QueryClient()
const ReactQueryDevtoolsProduction = React.lazy(() =>
import('@tanstack/react-query-devtools/build/modern/production.js').then(
(d) => ({
default: d.ReactQueryDevtools,
}),
),
)
function App() {
const [showDevtools, setShowDevtools] = React.useState(false)
React.useEffect(() => {
// @ts-expect-error
window.toggleDevtools = () => setShowDevtools((old) => !old)
}, [])
return (
<QueryClientProvider client={queryClient}>
<Example />
<ReactQueryDevtools initialIsOpen />
{showDevtools && (
<React.Suspense fallback={null}>
<ReactQueryDevtoolsProduction />
</React.Suspense>
)}
</QueryClientProvider>
)
}
export default App
这样,调用 window.toggleDevtools() 将下载开发者工具包并显示它们。
如果您的打包工具支持包导出,您可以使用以下导入路径
const ReactQueryDevtoolsProduction = React.lazy(() =>
import('@tanstack/react-query-devtools/production').then((d) => ({
default: d.ReactQueryDevtools,
})),
)
const ReactQueryDevtoolsProduction = React.lazy(() =>
import('@tanstack/react-query-devtools/production').then((d) => ({
default: d.ReactQueryDevtools,
})),
)
对于 TypeScript,您需要在 tsconfig 中设置 moduleResolution: 'nodenext',这需要至少 TypeScript v4.7。