Apollo Optimistic UI在Mutation Component中不起作用?

时间:2018-05-30 11:53:16

标签: reactjs graphql apollo react-apollo optimistic-ui

我使用的是<Mutation />组件,其中包含Render Prop API&amp;尝试在UI中进行乐观响应。

到目前为止,我在_onSubmit函数中有这个块 -

createApp({
    variables: { id: uuid(), name, link },
    optimisticResponse: {
        __typename: "Mutation",
        createApp: {
            __typename: "App",
            id: negativeRandom(),
            name,
            link
        }
    }
});

我的<Mutation />组件看起来像 -

<Mutation
    mutation={CREATE_APP}
    update={(cache, { data: { createApp } }) => {
        const data = cache.readQuery({ query: LIST_APPS });
        if (typeof createApp.id == "number") {
            data.listApps.items.push(createApp);
            cache.writeQuery({
                query: LIST_APPS,
                data
            });
        }
    }}
>

{/* 
some code here
*/}

</Mutation>

我知道update中的<Mutation />功能运行两次,一次optimisticResponse运行时服务器响应第二次回来。

第一次,我将id作为number提供给他们。 createApp optimisticResponse

中的结帐id: negativeRandom()

这就是为什么update组件中的<Mutation />道具检查createApp.id是否为number然后将其推入数组中的原因。这意味着如果从本地返回的数据然后将其推送到本地缓存&amp;如果从服务器返回,请不要推送它。

但是,只会在从服务器返回时显示数据。函数update运行两次,但不会将其推入数组中。

我认为可能有3个问题 -

  1. 推送本地状态时update函数无法运行

  2. 我尝试将fetchPolicy等同于cache-and-network&amp; cache-first但它也不起作用。

  3. __typename中的optimisticResponse。如果Mutation是正确的值,请点击,因此我也尝试了AppConnection,但它仍无效。

  4. 可以找到完整的代码here。为简单起见,整个代码存在于one file中。它是一个非常简单的应用程序,有2个输入和1提交按钮。它看起来像 -

    dark mode list app

    注意:同样适用于React。这是React Repo的链接 - https://github.com/deadcoder0904/react-darkmodelist

1 个答案:

答案 0 :(得分:3)

显然这是Apollo或React Apollo软件包中的错误。不知道是哪个错误,或者只是React Native的错误,但是我只是更新了我的依赖关系并解决了它,而没有更改任何代码

您可以在https://github.com/deadcoder0904/react-native-darkmode-list上查看完整代码