Relay.Store

The Relay Store 提供了一个用于向服务器发送 mutation 的API。

概述 #

方法

附注:同样地,applyUpdatecommitUpdate 方法也会在由 Relay.Container传递到 components 的 this.props.relay 上被提供。它们能调节正在运行中的 Relay.Environment 的上下文中 mutations。

方法 #

commitUpdate (静态方法) #

static commitUpdate(mutation: RelayMutation, callbacks: {
  onFailure?: (transaction: RelayMutationTransaction) => void;
  onSuccess?: (response: Object) => void;
}): RelayMutationTransaction

// Argument to `onFailure` callback
type Transaction = {
  getError(): ?Error;
}

commitUpdate 方法类似于在Flux中调度动作。 Relay 会按照如下来处理 mutation:

  • 如果这个 mutation 定义一个积极载荷- 一组要在等待服务器响应时在本地的数据 - Relay 应用这个改变并更新所有受影响的 React 组件 (要注意积极更新不会覆盖掉在缓存中的已知服务器数据)。
  • 如果这个 mutation 不会与其他未完成的 mutation 'collide' (重迭) - 如 getCollisionKey 实现所指定的那样 - 这会被发送到服务器。 如果会冲产生冲突,它会排队直到冲突的 mutation 完成。
  • 如果 mutation 成功,则回调 onSuccess
  • 如果 mutation 失败,则回调 onFailure

示例 #

var onSuccess = () => {
  console.log('Mutation successful!');
};
var onFailure = (transaction) => {
  var error = transaction.getError() || new Error('Mutation failed.');
  console.error(error);
};
var mutation = new MyMutation({...});

Relay.Store.commitUpdate(mutation, {onFailure, onSuccess});

applyUpdate (静态方法) #

static applyUpdate(mutation: RelayMutation, callbacks: {
  onFailure?: (transaction: RelayMutationTransaction) => void;
  onSuccess?: (response: Object) => void;
}): RelayMutationTransaction

applyUpdate 就像 update, 一样添加一个 mutation,不过并不提交它。它回传一个可以被提交或是回滚的 RelayMutationTransaction

当事务被提交并且从服务器接收到响应时,调用其中一个回调: - 如果 mutation 成功,则回调 onSuccess。 - 如果 mutation 失败,则回调 onFailure

示例 #

var onSuccess = () => {
  console.log('Mutation successful!');
};
var onFailure = (transaction) => {
  var error = transaction.getError() || new Error('Mutation failed.');
  console.error(error);
};
var mutation = new MyMutation({...});

var transaction = Relay.Store.applyUpdate(mutation, {onFailure, onSuccess});

transaction.commit();