Apollo-Client GraphQL refetchQueries如何工作?

时间:2019-10-17 11:09:49

标签: reactjs graphql apollo-client

您知道如何从34.900获取响应数据吗?我从变异中获得了查询响应数据。

静音

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'} } } 的响应数据。

?

1 个答案:

答案 0 :(得分:2)

通过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',
    },
  }],
})