【问题标题】:Error writing result to store for query. Cannot read property 'query' of undefined将结果写入存储以供查询时出错。无法读取未定义的属性“查询”
【发布时间】:2019-02-28 13:19:05
【问题描述】:

在突变后编写要存储的查询时出现错误。突变有效,我能够阅读突变后的查询。当我将相同的查询写入存储缓存时,出现以下错误:

index.js:2178 Error: Error writing result to store for query:
 query ($applicationId: Int) {
  vApplicationApprovalChainList(ApplicationId: $applicationId) {
    id
    approvalOrder
    approverId
    name
    applicationId
    __typename
  }
}

Cannot read property 'vApplicationApprovalChainList' of undefined
    at writeToStore.js:101
    at Array.forEach (<anonymous>)
    at writeSelectionSetToStore (writeToStore.js:97)
    at writeResultToStore (writeToStore.js:75)
    at InMemoryCache../node_modules/apollo-cache-inmemory/lib/inMemoryCache.js.InMemoryCache.write (inMemoryCache.js:99)

这是我的代码.. 突变和store.readQuery 有效,但store.writeQuery 给出了上述错误。提前感谢您的任何反馈。

APPROVERSLIST_QUERY = gql`
query ($applicationId:Int){
 vApplicationApprovalChainList(ApplicationId:$applicationId){
  id
  approvalOrder
  approverId  
  name
  applicationId  

  }
}

`;


 handleClick() {
        const { row, mutate} = this.props;
        mutate({
            variables: {
                id: row.id
            },
            update: (store, { data: { deleteApprover } }) => {

                const newdata = store.readQuery({
                    query: APPROVERSLIST_QUERY,
                    variables: { applicationId: row.applicationId }
                });
                console.log(newdata);
                newdata.vApplicationApprovalChainList = newdata.vApplicationApprovalChainList.filter(approver => approver.id !== deleteApprover.id);
                store.writeQuery({
                    query: APPROVERSLIST_QUERY, newdata });
                }
        });



    }

【问题讨论】:

    标签: graphql react-apollo apollo-client


    【解决方案1】:

    您没有将新数据传递给writeQuery。传递给writeQuery 的对象必须有一个名为data 的属性,其中包含新数据。此外,由于您的查询包含变量,因此您还需要包含该信息。

    store.writeQuery({
      query: APPROVERSLIST_QUERY,
      data: newdata,
      variables: {
        applicationId: row.applicationId,
      },
    });
    

    请参阅the official docs 了解更多示例以及对这两种方法的更详尽说明。

    【讨论】:

    • 我已经花了 4 个小时来解决这个问题。非常感谢您回答这个问题!
    猜你喜欢
    • 2019-07-27
    • 2023-03-16
    • 2019-08-08
    • 2017-12-13
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2017-11-08
    相关资源
    最近更新 更多