从数据库使用一次查询 gql,然后在第一次请求后从缓存使用查询 gql

useQuery gql once from the db and then from the cache after the first request

是时候提出一个新问题了。每个页面作为查询模拟,如:

const {data} = useQuery(EXAMPLE)

export const EXAMPLE = gql`
    query homePage(
        $orderBy: PostOrderByInput
        $userId: ID
    ) {
        posts(                   //Individual query for each page
            orderBy: $orderBy
            userId: $userId
        ) {
            id
            title
          } 
      userUserRelation{  //alway the same query. Need this request just once
            id
        }   
    }
`;

帖子查询是个人的。每个页面总是不同的变量。 userUserRelation 查询始终相同。在第一个访问的页面上,我只需要一次来自数据库的 userUserRelation。然后我可以从缓存中查询它。 是否有可能总是从数据库发出帖子请求,而 userUserRelation 查询只从数据库发出一次,然后从缓存发出?相当于@client

当然我可以用全局状态来解决这个问题。并在第一次请求后创建一个没有 userUserRelation 的额外 gql。或者我做了一个额外的 useQuery(但是我在最合适的时候有 2 个查询...)

感谢任何帮助。

您应该将查询分成两个单独的挂钩。这样 userUserRelation 只会被获取一次,只要你使用 cache-first 的默认 fetchPolicy

export const POSTS_QUERY = gql`
  query Posts(
    $orderBy: PostOrderByInput
    $userId: ID
  ) {
    posts(orderBy: $orderBy, userId: $userId) {
      id
      title
    } 
    userUserRelation {
      id
    }   
  }
`;

export const USER_QUERY = gql`
  query User {
    userUserRelation {
      id
    }   
  }
`;

const { data: userData } = useQuery(USER_QUERY)
const { data: postsData } = useQuery(POSTS_QUERY, { variables: { ... } })

如果您希望最初在单个请求中提取查询,您可以enable batching for your client