从 commitMutation 的更新程序函数更新存储时出现问题

Posted

技术标签:

【中文标题】从 commitMutation 的更新程序函数更新存储时出现问题【英文标题】:Issue while updating store from updater function of commitMutation 【发布时间】:2019-07-18 11:44:56 【问题描述】:

我有一个突变

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一直指向同一个对象。

在更新函数的末尾添加以下行 unlink quoteLine from createQuoteLine 也不起作用。

payload.setValue(null, 'quoteLine');

非常感谢您在这方面的任何帮助。

【问题讨论】:

【参考方案1】:

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

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

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

尝试这样的事情,如果解决了,请告诉我:)。

【讨论】:

以上是关于从 commitMutation 的更新程序函数更新存储时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

错误:找不到要更新的行。自上次读取以来,某些值可能已更改。关于将提供程序从 SQLOLEDB 更改为 MSOLEDBSQL

在 PostgreSql 中批量更新或删除哪个更高效?

Vue 之 Mutatuons

当应用程序从商店更新或首次安装在 Android 中时,如何调用特定函数?

Ruby .store 函数将哈希值从数组更改为单个值

如何将变量值从循环A更新到另一个循环B - 在bash中