Использовать существующие переменные при использовании refetchQueries в Reaction-Apollo - PullRequest
0 голосов
/ 11 апреля 2019

Я использую postsConnection запрос для бесконечной прокрутки. Содержит переменные типа after. После мутации upvote я хочу refetchQueries ... вот так ?

const upvote = await client.mutate({
      mutation: UPVOTE_MUTATION,
      variables: {
        postId: this.props.post.id
      },
      refetchQueries: [
        { query: POST_AUTHOR_QUERY }
      ]
    })

Выше код выдает ошибку, потому что POST_AUTHOR_QUERY принимает несколько переменных. Вот этот запрос ?

export const POST_AUTHOR_QUERY = gql`
    query POST_AUTHOR_QUERY($authorUsername: String! $orderBy: PostOrderByInput $after: String){
        postsAuthorConnection(authorUsername: $authorUsername orderBy: $orderBy after: $after) {
                   ....
        }
    }

Я не хочу добавлять переменные вручную. Переменные уже хранятся в кеше. Как я могу использовать их при использовании refetchQueries ???

Вот несколько ресурсов, которые я прочитал об этой проблеме ?

https://github.com/apollographql/react-apollo/issues/817

https://github.com/apollographql/apollo-client/issues/1900

1 Ответ

0 голосов
/ 11 апреля 2019

Как уже упоминалось в проблеме, которую вы связали , вы должны быть в состоянии сделать следующее:

import { getOperationName } from 'apollo-link'

const upvote = await client.mutate({
  // other options
  refetchQueries={[getOperationName(POST_AUTHOR_QUERY)]}
})

Из документов :

Обратите внимание, что если вы вызываете refetchQueries с массивом строк, то клиент Apollo будет искать любые ранее вызванные запросы, имена которых совпадают с именами предоставленных строк. Затем он будет повторно выполнять эти запросы с их текущими переменными.

getOperationName просто анализирует передаваемый вами документ и извлекает из него имя операции. Конечно, вы можете вместо этого указать имя операции в виде строки, но таким образом вы избежите проблем, если имя операции изменится в будущем или вы его просто перепутаете.

...