pnpm add @tanstack/react-query
pnpm add -D @tanstack/eslint-plugin-query
{
"plugins": ["@tanstack/query"]
}
{
"rules": {
"@tanstack/query/exhaustive-deps": "error",
"@tanstack/query/prefer-query-object-syntax": "error"
}
}
{
"extends": ["plugin:@tanstack/eslint-plugin-query/recommended"]
}
import {
useQuery,
useMutation,
useQueryClient,
QueryClient,
QueryClientProvider
} from "@tanstack/react-query"
// 创建client
const queryClient = new QueryClient()
function App() {
return (
<QueryClientProvider client={queryClient}>
<Todos/>
</QueryClientProvider>
)
}
function Todos() {
// 访问client
const queryClient = useQueryClient()
// queries
const query = useQuery({
queryKey: ['todos'],
queryFn: () => fetch('http://localhost:4000/api/get')
})
// 突变
const mutations = useMutation({
mutationFn: () => fetch("http://localhost:4000/api/post"),
onSuccess: () => {
// 重新获取最新数据
queryClient.invalidateQueries({ queryKey: ['todos'] })
}
})
return (
<>
<div>
{JSON.stringify(query.data)}
</div>
<button onClick={() => mutations.mutate()}>
Add Todo
</button>
</>
)
}