我使用的是<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个问题 -
推送本地状态时update
函数无法运行
我尝试将fetchPolicy
等同于cache-and-network
&amp; cache-first
但它也不起作用。
__typename
中的optimisticResponse
。如果Mutation
是正确的值,请点击,因此我也尝试了AppConnection
,但它仍无效。
可以找到完整的代码here。为简单起见,整个代码存在于one file中。它是一个非常简单的应用程序,有2个输入和1提交按钮。它看起来像 -
答案 0 :(得分:3)
显然这是Apollo或React Apollo软件包中的错误。不知道是哪个错误,或者只是React Native的错误,但是我只是更新了我的依赖关系并解决了它,而没有更改任何代码
您可以在https://github.com/deadcoder0904/react-native-darkmode-list上查看完整代码