从数据库使用一次查询 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。
是时候提出一个新问题了。每个页面作为查询模拟,如:
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。