useQuery gql один раз из базы данных, а затем из кеша после первого запроса - PullRequest
0 голосов
/ 06 августа 2020

время для нового вопроса. Каждая страница как подобный запрос:

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

Конечно, я могу решить эту проблему с помощью глобального состояния. И сделайте дополнительный gql без userUserRelation после первого запроса. Или я делаю дополнительный useQuery (но тогда у меня есть 2 запроса в самое подходящее время ...)

THX для любой помощи.

1 Ответ

1 голос
/ 06 августа 2020

Вы должны разделить ваш запрос на две отдельные ловушки. Таким образом, userUserRelation будет извлекаться только один раз, если вы используете fetchPolicy по умолчанию cache-first.

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: { ... } })

Если вы хотите, чтобы запросы сначала извлекались внутри одного запроса, вы можете включить пакетирование для вашего клиента .

...