Graphql 我需要了解中继输出字段getFatQuery的帮助

Graphql 我需要了解中继输出字段getFatQuery的帮助,graphql,relayjs,relay,graphql-js,Graphql,Relayjs,Relay,Graphql Js,这是来自relay官方文档的代码,这是用于GraphQladdToDomutate的 const GraphQLAddTodoMutation = mutationWithClientMutationId({ name: 'AddTodo', inputFields: { text: { type: new GraphQLNonNull(GraphQLString) }, }, outputFields: { todoEdge: { type: Gra

这是来自relay官方文档的代码,这是用于GraphQladdToDomutate的

const GraphQLAddTodoMutation = mutationWithClientMutationId({
  name: 'AddTodo',
  inputFields: {
    text: { type: new GraphQLNonNull(GraphQLString) },
  },
  outputFields: {
    todoEdge: {
      type: GraphQLTodoEdge,
      resolve: ({localTodoId}) => {
        const todo = getTodo(localTodoId);
        return {
          cursor: cursorForObjectInConnection(getTodos(), todo),
          node: todo,
        };
      },
    },
    viewer: {
      type: GraphQLUser,
      resolve: () => getViewer(),
    },
  },
  mutateAndGetPayload: ({text}) => {
    const localTodoId = addTodo(text);
    return {localTodoId};
  },
});
我认为mutateAndGetPayload首先执行,然后输出字段?因为它使用localTodoId对象作为参数,所以我看到从mutateAndGetPayload返回的localTodoId对象

这是中继变异的代码。请看getFatQuery

export default class AddTodoMutation extends Relay.Mutation {
  static fragments = {
    viewer: () => Relay.QL`
      fragment on User {
        id,
        totalCount,
      }
    `,
  };
  getMutation() {
    return Relay.QL`mutation{addTodo}`;
  }
  getFatQuery() {
    return Relay.QL`
      fragment on AddTodoPayload @relay(pattern: true) {
        todoEdge,
        viewer {
          todos,
          totalCount,
        },
      }
    `;
  }
  getConfigs() {
    return [{
      type: 'RANGE_ADD',
      parentName: 'viewer',
      parentID: this.props.viewer.id,
      connectionName: 'todos',
      edgeName: 'todoEdge',
      rangeBehaviors: ({status}) => {
        if (status === 'completed') {
          return 'ignore';
        } else {
          return 'append';
        }
      },
    }];
  }
  getVariables() {
    return {
      text: this.props.text,
    };
  }
  getOptimisticResponse() {
    return {
      // FIXME: totalCount gets updated optimistically, but this edge does not
      // get added until the server responds
      todoEdge: {
        node: {
          complete: false,
          text: this.props.text,
        },
      },
      viewer: {
        id: this.props.viewer.id,
        totalCount: this.props.viewer.totalCount + 1,
      },
    };
  }
}

我认为todoEdge来自GraphQL的输出字段?我在上面看到一个查看器查询,为什么它需要查询查看器?如何创建getFatQuery?如果有人能帮助我更多地了解这一点,了解接力突变,我将不胜感激

执行mutateAndGetPayload
然后将返回到输出字段


mutationWithClientMutationId
  • inputFields
    :定义突变的输入结构,其中输入字段将用输入值包装

  • outputFields
    :定义变异完成后字段的输出结构,我们可以查看和读取该结构

  • mutateAndGetPayload
    :此函数是中继突变的核心函数,它执行突变逻辑(如数据库操作),并将返回要暴露于突变输出字段的有效负载

mutateAndGetPayload
使用mutation从输入字段映射到输出字段 活动它收到的第一个参数是输入参数列表,我们可以读取这些参数来执行变异操作

我们从
mutateAndGetPayload
返回的对象可以在输出字段中访问
resolve()
用作第一个参数


getFatQuery()
是我们使用GraphQL片段表示一切的地方
在我们的数据模型中,可能因该突变而改变的数据将执行,然后返回到outputFields


mutationWithClientMutationId
  • inputFields
    :定义突变的输入结构,其中输入字段将用输入值包装

  • outputFields
    :定义变异完成后字段的输出结构,我们可以查看和读取该结构

  • mutateAndGetPayload
    :此函数是中继突变的核心函数,它执行突变逻辑(如数据库操作),并将返回要暴露于突变输出字段的有效负载

mutateAndGetPayload
使用mutation从输入字段映射到输出字段 活动它收到的第一个参数是输入参数列表,我们可以读取这些参数来执行变异操作

我们从
mutateAndGetPayload
返回的对象可以在输出字段中访问
resolve()
用作第一个参数


getFatQuery()
是我们使用GraphQL片段表示一切的地方
在我们的数据模型中,这种突变可能会导致变化

请您解释一下“查看器”在“outputFields”中的作用,不要被名称弄糊涂了<
outputFields
中的code>viewer只是一个普通字段,带有自定义的
GraphQLUser
类型和属性
todos
totalCount
。请您解释一下“viewer”在“outputFields”中的作用,不要被名称弄糊涂<“代码>查看器”在
outputFields
中只是一个常规字段,具有自定义
GraphQLUser
type,属性
todos
totalCount