Apollo Optimistic UI 在 Mutation 组件中不起作用?

IT技术 reactjs graphql apollo react-apollo optimistic-ui
2021-05-04 09:47:52

我正在使用<Mutation />具有 Render Prop API 的组件并尝试在 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. createAppoptimisticResponse哪里结帐id: negativeRandom()

这就是为什么我的updateprop in<Mutation />组件有一个检查 if createApp.idis a numberthen push it in the array。这意味着如果数据从本地返回,则将其推送到本地缓存中,如果从服务器返回,则不推送它。

但是发生的情况是数据仅在从服务器返回时显示。该函数update运行两次,但不会将其推送到数组中。

我认为可能有 3 个问题 -

  1. update当本地状态被推送时函数不运行

  2. 我试过使fetchPolicy等于cache-and-network&cache-first但它也不起作用。

  3. __typenameoptimisticResponseIdk ifMutation是正确的值,所以我也尝试AppConnection过,但它仍然不起作用。

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

暗模式列表应用程序

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

1个回答

显然这是 Apollo 或 React Apollo 包中的一个错误。不知道是哪个错误还是仅针对 React Native 但我只是更新了我的依赖项并解决了它而没有更改任何代码

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