使用OptimisticResponse进行的变异不包括第二次更新

时间:2018-02-24 07:30:49

标签: reactjs graphql react-apollo aws-appsync

与问题here类似,我发现当使用optimisticResponse并更新突变时,从服务器响应中设置的id是错误的。此外,id实际上是通过再次运行optimistic函数来设置的。

在下面的变异中,refetchQueries是故意注释掉的。我不想用它。我想通过 update 来管理所有内容。

另请注意,optimisticResponse id前面有一个“ - ”来证明乐观函数运行两次:

id: "-" _ uuid()

突变

graphql(MutationCreateChild, {
    options: {
      // refetchQueries: [{QueryAllChildren, variables: {limit: 1000}}],
      update: (proxy, {data: {createChild}}) => {
        const query = QueryAllChildren;
        const data = proxy.readQuery({query});

        data.listChildren.items.push(createChild);
        proxy.writeQuery({query, data});

        console.log("id: ", createChild.id);
      }
    },
    props: props => ({
      createChild: child => {
        return props.mutate({
          variables: child,
          optimisticResponse: () => ({
            createChild: {
              ...child,
              id: "-" + uuid(),
              __typename: "Child"
            }
          })
        });
      }
    })
  })

console.log语句的输出是:

id:  -6c5c2a28-8bc1-49fe-92e1-2abade0d06ca
id:  -9e0a1c9f-d9ca-4e72-88c2-064f7cc8684e

虽然chrome开发者控制台中的实际请求如下所示:

{"data":{"createChild":{"id":"f5bd1c27-2a21-40c6-9da2-9ddc5f05fd40",__typename":"Child"}}}

这是一个错误还是我没有在更新功能中正确访问id?

1 个答案:

答案 0 :(得分:1)