Skip to main content

GraphQL

由于 React Query 的获取机制不可知地(agnostically)建立在 Promises 上,因此您可以将 React Query 与字面上的任何异步数据获取客户端(包括 GraphQL)一起使用!

请记住,React Query 不支持归一化缓存。 尽管绝大多数用户实际上并不需要归一化缓存,甚至没有像他们认为的那样受益,但是在极少数情况下可能需要这样做,因此请务必先与我们联系。 以确保它是你所需要的真正的东西!

类型安全的代码生成

React Query 和 graphql-request^5GraphQL Code Generator 一起使用时,可以提供全量的类型安全的 GraphQL 操作:

import request from "graphql-request";
import { useQuery } from "@tanstack/react-query";

import { graphql } from "./gql/gql";

const allFilmsWithVariablesQueryDocument = graphql(/* GraphQL */ `
query allFilmsWithVariablesQuery($first: Int!) {
allFilms(first: $first) {
edges {
node {
id
title
}
}
}
}
`);

function App() {
// `data` is fully typed!
const { data } = useQuery({
queryKey: ["films"],
queryFn: async () =>
request(
"https://swapi-graphql.netlify.app/.netlify/functions/index",
allFilmsWithVariablesQueryDocument,
// variables are type-checked too!
{ first: 10 }
),
});
// ...
}

例子的全量代码(仓库)

有关 GraphQL 类型,请参阅关于 GraphQL 代码生成器文档的专用指南