Как работает Apollo-Client GraphQL refetchQueries? - PullRequest
0 голосов
/ 17 октября 2019

Есть идеи, как нам получить данные ответа от refetchQueries? Я получил данные ответа на запрос от мутации.

Мутация

import { gql } from 'apollo-boost';

export const DONE_TASK = gql`
    mutation DoneTask($taskId: ID!) {
        doneTask(input: {
            taskId: $taskId
        }) {
            task {
                id
                status
            }
        }
    }
`;

Запрос

import { gql } from 'apollo-boost';

export const GET_TASKS_BY_STATUS = gql`
    query GetTasksByStatus($status: String!) {
        getTasksByStatus(status: $status) {
            edges {
                node {
                    id
                    status
                    description
                }
            }
        }
    }
`;

Использование

const response = await client.mutate({
    mutation: DONE_TASK,
    variables: {
        taskId: 1
    },
    refetchQueries: () => [{
        query: GET_TASKS_BY_STATUS,
        variables: { 
            status: "OPEN"
        },
    }]
});

console.log(response);
Вывод
data: {
    doneTask: {
        task: { id:  1, status: 'DONE'}
    }
}

НоЯ ожидаю ответные данные от GET_TASKS_BY_STATUS.

? ?

1 Ответ

2 голосов
/ 17 октября 2019

Любые запросы, которые вы re извлекаете через refetchQueries, уже должны использоваться некоторыми useQuery ловушками, Query компонентами или graphql HOC. Чтобы получить доступ к данным внутри того же компонента, что и ваша мутация, вам нужно использовать запрос, повторно получаемый внутри этого же компонента:

const { data } = useQuery(GET_TASKS_BY_STATUS, { variables: { status: 'OPEN' } })
const [mutate] = useMutation(DONE_TASK,{
  variables: {
    taskId: 1,
  },
  refetchQueries: () => [{
    query: GET_TASKS_BY_STATUS,
    variables: { 
      status: 'OPEN',
    },
  }],
})
...