【发布时间】: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,您应该使用readQuery和writeQuery。
标签: reactjs apollo-client