Relay.GraphQLMutation

Relay.GraphQLMutation 是用于构建 GraphQL mutation 的低级 API。

这是产品代码可以处理 Relay 中的 mutation 的最低抽象级别,它对应于 the GraphQL 规范 中描述的 mutation 操作(“写入后读取”)。你需要指定 mutation,input 和 query。

Relay.GraphQLMutation 没有提供特殊的功能,例如 fat 查询或是 跟踪查询 (就是要被送到服务器的 mutation 查询 的在执行期自动生成),而不是让用户定义一个静态且明确的 查询。限制你自己使用这个低阶 API 是个有用的准备步骤,将可以帮你的程序代码库准备好迁移到新的静态 Relay 核心。同时,如果你想要这些动态的功能,可以采用高级别的 Relay.Mutation API。

概述 #

属性

方法

属性 #

create (静态方法) #

static create(
  mutation: RelayConcreteNode,
  variables: Object,
  environment: RelayEnvironmentInterface
): RelayGraphQLMutation;

C包装构造函数的快捷方法,传递一些默认参数并返回一个实例。

示例 #

const environment = new Relay.Environment();
const query = Relay.QL`mutation FeedbackLikeMutation {
  feedbackLike(input: $input) {
    clientMutationId
    feedback {
      doesViewerLike
    }
  }
}`;
const variables = {
  input: {
    feedbackId: 'aFeedbackId',
  },
};

const mutation = Relay.GraphQLMutation.create(
  query,
  variables,
  environment
);

注意:在大多数情况下,可以依赖于暴露于的环境的默认单例实例 Relay.Store.

See also: GraphQLMutation > Constructor

createWithFiles (静态方法) #

包装构造函数的快捷方法,传递一些默认参数并返回一个实例。

static createWithFiles(
  mutation: RelayConcreteNode,
  variables: Variables,
  files: FileMap,
  environment: RelayEnvironmentInterface
): RelayGraphQLMutation;

示例 #

// Given a `files` object of:
//
//   type FileMap = {[key: string]: File};
//
// and `query`, `variables` and `environment` arguments
// as in the previous example:
const mutation = Relay.GraphQLMutation.createWithFiles(
  query,
  variables,
  files,
  environment
);

See also: GraphQLMutation > 构造函数

方法 #

构造函数 #

constructor(
  query: RelayConcreteNode,
  variables: Variables,
  files: ?FileMap,
  environment: RelayEnvironmentInterface,
  callbacks: ?RelayMutationTransactionCommitCallbacks,
  collisionKey: ?string
);

这是用可选的 filescallbackscollisionKey 参数来建立 Relay.GraphQLMutation 实例的一般构造函数。

调用者必须提供一个适当的 query 以及 variables。参照 GraphQL Relay 规范:

  • mutation 应该接收一个 "input" 的单一参数。
  • 该 input 参数应该包含一个"clientMutationId"(字符串) 属性用于协调请求和响应 (会自动被 Relay.GraphQLMutation API 添加)。
  • • 查询应该请求"clientMutationId"当作一个选择的属性。

如果没有提供,则导出唯一的冲突键(意味着所创建的 mutation 将是独立的,而不与任何其他冲突键相冲突)。

示例 #

const collisionKey = 'feedback-like: ' + variables.input.feedbackId;
const mutation = new Relay.GraphQLMutation(
  query,
  variables,
  null, // No files.
  environment,
  {
    onFailure: err => console.warn(err),
    onSuccess: () => console.log('Success!'),
  },
  collisionKey
);

参阅: Relay.Mutation::getCollisionKey()

applyOptimistic #

applyOptimistic(
  optimisticQuery: RelayConcreteNode,
  optimisticResponse: Object,
  configs: ?Array<RelayMutationConfig>
): RelayMutationTransaction;

调用这个函数来积极地将更新应用于存储。

根据API ,可选的 config 参数可用于配置< code>RANGE_ADD 或其他类型的突变 Relay.Mutation。这告诉 Relay 如何处理响应。

可选的,在后面调用 commit() 来发送 mutation 到服务器。

附注: 一个积极更新在一个实例中只可以调用一次。

示例 #

const optimisticQuery = Relay.QL`mutation FeedbackLikeOptimisticUpdate {
  feedbackLike(input: $input) {
    clientMutationId
    feedback {
      doesViewerLike
      id
    }
  }
}`;
const optimisticResponse = {
  feedback: {
    doesViewerLike: true,
    id: 'aFeedbackId',
    __typename: 'Feedback',
  },
};

const transaction = mutation.applyOptimistic(
  optimisticQuery,
  optimisticResponse,
);

参阅: Relay.Mutation::getConfigs()

commit #

commit(configs: ?Array<RelayMutationConfig>): RelayMutationTransaction;

调用这个将变量发送到服务器。

可选 config 参数可用于配置一种 RANGE_ADD 或其他类型的 mutation,类似于Relay.MutationAPI。

可选的,在调用之前,applyOptimistic()将积极地更新应用于存储。

注意:此方法只能在每个实例中调用一次。

Example #

const configs = [{
  type: 'RANGE_ADD',
  connectionName: 'topLevelComments',
  edgeName: 'feedbackCommentEdge',
  parentID: 'aFeedbackId',
  parentName: 'feedback',
  rangeBehaviors: {
    '': GraphQLMutatorConstants.PREPEND,
  },
}];
const transaction = mutation.commit(configs);

参阅: Relay.Mutation::getConfigs()

rollback #

rollback(): void;

Rolls back an optimistic mutation.

另见 #

在测试套件中可以找到一些更详细的用法示例。