как сопоставить запросы с refetchQuery от apollo - PullRequest
0 голосов
/ 22 марта 2019

Мой основной вопрос: переменные для запросов должны быть точными, чтобы refetchQueries работал.Или вы можете дать ему подмножество переменных, и оно будет соответствовать аналогичным запросам.

Рассмотрите следующее ....

  <Query<NotesQuery, NotesQueryVariables>
      query={notesQuery}
      variables={{
        input: {
          notebookId: notebookContext.id,
          first: 20
        }
      }}
    >
</Query>

и следующую мутацию:

    client
      .mutate<NoteCreateOrUpdateMutation, NoteCreateOrUpdateMutationVariables>({
        mutation: noteCreateOrUpdateMutation,
        variables: {
          input: {
            noteId: note ? note.id : undefined,
            subjectIds: noteSubjects,
            notebookId: notebookContext.id,
            authorId: userContext.id,
            content: noteContent,
            context: noteCaption,
          }
        },
        refetchQueries: [
          {
            query: notesQuery,
            variables: { input: { notebookId: notebookContext.id } } as NotesQueryVariables
          }
        ]
      })

когда я делаю эту мутацию, она НЕ перезагружает запрос заметки с нумерацией страниц

Если я добавлю параметр first: 20 - он работает.

Я бы хотел, чтобы он очистил все примечания.которые соответствуют заданным параметрам.Это возможно?

1 Ответ

1 голос
/ 23 марта 2019

Я полагаю, вы захотите добавить директивы @connection к вашим gql определениям notesQuery и measurementsQuery.Вы не публиковали их, поэтому, к сожалению, я не могу показать вам, как именно это будет выглядеть для вашего варианта использования.

В любом случае, директива @connection позволит Apollo совпадать, например, с notebookId, игнорируя значение first.

К сожалению, вы объединили все свои входные данные в объект input, и я не знаю, как бы вы выбрали просто notebookId с фильтром.Предполагая, что ваше определение gql выглядит примерно так для notesQuery:

const notesQuery = gql`
  query notes($input: InputType!) {
    notes(input: $input) @connection(key: "notes", filter: ["input['notebookId']"]) {
      id
      ...
    }
  }
`;

^^^ К сожалению, это не сработает из-за того, как работает функция apollo-utilities/lib/storeUtils.js -> getStoreKeyName().,Он просто проигнорирует приведенную выше попытку получить лучшее разрешение, чем имя arg, т.е. не может выйти за пределы input.Любая строка в массиве фильтра, которая не соответствует имени аргумента, игнорируется.

Похоже, вам придется изменить свою схему.

Дополнительная информация по адресу: https://www.apollographql.com/docs/react/features/pagination.html#connection-directive

...