我正在尝试乐观地更新UI,为此我正在使用道具和更新功能。但是,我收到警告,例如缺少字段“ _id”,“所有者”,“元”和“评论”。我还附有警告屏幕截图。我该如何解决以下问题?

javascript - 乐观地更新用户界面时,缺少字段“_id”,“所有者”,“元”和“注释”-LMLPHP

这是代码

    const withMutations = graphql(CommentMutation, {
  options: () => ({
    ...getDefaultOptions('collaboration')
  }),
  props: ({ ownProps, mutate }) => {
    return {
    submitComment: ({ value }) =>
      mutate({
        variables: {
          commentData: {
            comment: value
          }
        },
        optimisticResponse: {
          __typename: 'Mutation',
          addComment: {
            __typename: 'CommonResponse',
            _id       : -1,
            id        : null,
            comment   : value,
            meta      : ownProps.data[0].meta,
            owner     : ownProps.data[0].owner,
            status    : 'success',
            message   : 'Comment successfully added.',
            action    : 'AddComment',
          },
        },
//         optimisticResponse: {
//           __typename: 'Mutation',
//           addComment: {
//             __typename: 'CommonResponse',
//             id        : -1,
//             status    : 'success',
//             message   : 'Comment successfully added.',
//             action    : 'AddComment',
//           },
//         },
        update: (store, { data }) => {
          const data2 = store.readQuery({ query: CommentsQuery });
          data2.comments.unshift(data.addComment);
          store.writeQuery({ query: CommentsQuery, data: data2 });
        },
      }),
    };
  },
});


我在这里有完整的代码

https://gist.github.com/SanskarSans/907063ed9a27d3f38f7de25ca4072faf

最佳答案

好吧,你将不得不传递一些东西。例如,只需使用shortId生成一个临时ID。当来自服务器的数据到达时,乐观数据将回滚,所以这不是问题。如果您尚不知道该评论,并已正确地将prop声明为可选,则只需在乐观回复中将其声明为null。

09-30 19:16