У меня есть крайний случай, когда моя apollo-graphql
реагирующая мутация не обновляет пользовательский интерфейс должным образом, но только если массив edges
изначально пуст.
Я пытаюсь добавить новый комментарий Ответьте на родительский комментарий и добавьте новый в список после того, как была сделана мутация. Это работает, когда уже есть хотя бы один существующий ответ на комментарий, но добавление первого никогда не обновляется после мутации, пока я не перефразирую sh страницу.
Вот функция мутации
...
const queryVariables = {
last: 2,
parentId: comment.id,
sortBy: "MODIFIED_AT_ASC",
};
const [createPostComment] = useMutation(CREATE_POST_COMMENT, {
update(cache, { data: { createComment } }) {
const { allComments } = cache.readQuery({
query: GET_COMMENT_CHILDREN,
variables: queryVariables,
});
cache.writeQuery({
query: GET_COMMENT_CHILDREN,
variables: queryVariables,
data: {
allComments: {
...allComments,
edges: allComments.edges.concat({ // if this is empty, it doesn't update
node: createComment.comment,
__typename: "CommentEdge",
}),
},
},
});
},
});
createPostComment({
variables: {
input: {
parentId: comment.id,
userPostId: comment.userPost.id,
appUserId: 1,
content: content,
},
},
});
...
Вот мутация CREATE_POST_COMMENT
import gql from "graphql-tag";
import { CommentFragment } from "gql/fragments";
export const CREATE_POST_COMMENT = gql`
mutation CreatePostComment($input: CommentInput!) {
createComment(input: $input) {
comment {
...CommentFragment
userPost {
id
}
children {
edges {
node {
...CommentFragment
userPost {
id
}
}
}
}
}
}
}
${CommentFragment}
`;
И GET_COMMENT_CHILDREN
запрос
import gql from "graphql-tag";
import { CommentFragment } from "gql/fragments";
export const GET_COMMENT_CHILDREN = gql`
query allCommentChildren(
$last: Int!
$before: String
$sortBy: [CommentObjectSortEnum]!
$parentId: Int!
) {
allComments(
last: $last
before: $before
sort: $sortBy
filters: { parentId: $parentId }
) {
pageInfo {
startCursor
hasPreviousPage
}
edges {
node {
...CommentFragment
userPost {
id
}
}
}
}
}
${CommentFragment}
`;
Фрагмент комментария
export const CommentFragment = gql`
fragment CommentFragment on CommentObject {
id
content
createdAt
parentId
}
`;
Почему это работает нормально, когда ответ на комментарий уже существует, но только если edges
изначально пуст?