从commitMutation的更新程序功能更新存储时出现问题

时间:2019-02-25 05:27:11

标签: graphql relayjs relay relaymodern

我有一个突变

mutation createQuoteLineMutation {
    createQuoteLine {
      quoteLine {
        name
        price
        product {
          name
        }
      }
    }
  }

我的更新程序功能如下。

updater: (store) => {
      const payload = store.getRootField('createQuoteLine');
      const newQuoteLine = payload.getLinkedRecord('quoteLine');
      const quote = store.getRoot().getLinkedRecord('getQuote');
      const quoteLines = quote.getLinkedRecords('quoteLines') || [];
      const newQuoteLines = [...quoteLines, newQuoteLine];
      quote.setLinkedRecords(newQuoteLines, 'quoteLines');
}

这第一次可以正常运行,但是先前所有添加的quoteLines的随后突变都更改为新的,我假设这是因为newQuoteLine一直指向同一对象。

在更新程序功能的末尾添加以下行,也无法从createQuoteLine链接quoteLine。

payload.setValue(null, 'quoteLine');

在这方面的任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我看到了一个非常相似的问题,但是不确定是否相同。尝试将clientMutationId传递给突变,然后将其递增。

const commit = (
  input,
  onCompleted: (response) => void,
) => {
  const variables = {
    input: {
      ...input,
      clientMutationId: temp++,
    },
  };

  commitMutation(Environment, {
    mutation,
    variables,
    onCompleted,
    onError: null,
    updater: store => {
      // ....
    },
  });
};

尝试类似的方法,让我知道它是否可以解决:)。