【问题标题】:Update item in Apollo cache更新 Apollo 缓存中的项目
【发布时间】:2021-01-13 12:22:24
【问题描述】:

我不知道如何用 apollo 更新列表中的现有项目。

我有如下列表:

query TimePerProject($first: Int!, $offset: Int!) {
  timePerProjects(first: $first, offset: $offset) {
    edges {
      node {
        id
        startTime
        stopTime
        project {
          mainorder
        }
        person {
          id
          fullName
        }
      }
    }
    totalCount
  }
}

和更新为的变异查询:

mutation UpdateTimePerProject($id: Int!, $projectmainorder: String, $startTime: Datetime, $stopTime: Datetime) {
  __typename
  updateTimePerProject(input: {patch: {projectId: $projectmainorder, startTime: $startTime, stopTime: $stopTime}, id: $id}) {
    clientMutationId
    timePerProjectEdge {
      node {
        id
        startTime
        stopTime
        project {
           mainorder
        }
        person {
          id
          fullName
        }
      }
    }
  }
}

我正在尝试将突变用作:

const [updateWorktime] = useMutation(
    UpdateWorkTimeMutation, {
      update(cache, { data:  { updateTimePerProject: { timePerProjectEdge } } }) {
        cache.modify({
          fields: {
            timePerProjects(existingTimePerProjects = [], { readField }) {
              const newCommentRef = cache.writeFragment({
                data: timePerProjectEdge ,
                fragment: gql`
                  fragment TimePerProject on TimePerProjectsEdge {
                    node {
                      id
                      startTime
                      stopTime
                      project {
                        mainorder
                      }
                    }
                  }
                `
              });
              return [...existingTimePerProjects];
            }
          }
        });
      }}
  );

不幸的是,这似乎是错误的方式,因为我遇到了错误:

Error: Could not identify object {"node":{"id":76552,"startTime":"2020-09-23T14:19:44+02:00","stopTime":"2020-09-23T15:53:54+02:00","projectId":"XXXX","person":{"fullName":"person name","__typename":"Person"},"__typename":"TimePerProject"},"__typename":"TimePerProjectsEdge"}

任何建议更新缓存列表中的项目的正确方法是什么?

【问题讨论】:

  • 不要使用cache.modify。请阅读Apollo docs,您应该使用readQuerywriteQuery

标签: reactjs apollo-client


【解决方案1】:

我缺少从原始查询和突变返回的游标。 两者都有,缓存自动识别更新记录,无需自定义更新功能

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 2019-06-28
    • 2023-02-24
    • 2019-11-26
    • 2021-03-11
    • 2020-05-09
    • 2020-11-21
    • 2021-07-30
    • 2020-05-11
    相关资源
    最近更新 更多