当前位置: 首页 > 知识库问答 >
问题:

为什么需要更新程序/更新功能来更新React Relay和Apollo客户端中的本地缓存?

宋俊民
2023-03-14

我正在考虑使用React Relay或Apollo客户端。我喜欢GraphQL作为一种查询语言的想法,它可以针对任何API或数据存储执行。

然而,我感到惊讶的是,在一个简单的变化之后,需要手动(并且必须)更新存储/缓存,比如在列表中添加一个待办事项。以下是更新程序/更新功能的文档:

http://facebook.github.io/relay/docs/en/mutations.htmlhttps://www.apollographql.com/docs/react/essentials/mutations.html

为什么需要用户定义的更新程序函数

具体来说,为什么我必须编写一个更新程序函数来处理按顺序运行这两个GraphQL查询?

//Create todo item
mutation createTodo($input: TodoInput!) {
    createTodo(input: $input) {
        id
        name
        desc
    }
}

mutationVariables = { input: { name: 'Shopping', desc: 'Get groceries' }};


//Select all todos
query {
    todos {
        id
        name
        desc
    }
}  

为什么todo查询不会自动返回新的todo项?这就是声明式查询语言IMO的要点。

共有1个答案

荀靖
2023-03-14

更新本地缓存背后的想法是最小化客户端和服务器之间传递的数据量。

手动更新本地缓存完全取决于您。您完全可以对您的变异进行编程,以返回新的或所有todo,然后它将更新您的本地缓存。(由于需要等待响应,因此更新速度将比手动更新慢。)手动更新vs等待服务器响应有一些很好的用例

使用apollo,您还可以关闭本地缓存,只使用“仅网络”作为提取策略。

 类似资料:
  • 我正在阅读关于功能更新的React Hook留档,请参阅以下引用: “”和“-”按钮使用函数形式,因为更新的值基于以前的值 但是我看不出需要功能更新的目的是什么,它们和直接使用旧状态计算新状态有什么区别。 为什么React-useState钩子的更新程序函数需要函数更新表单?在哪些示例中,我们可以清楚地看到差异(因此使用直接更新会导致错误)? 例如,如果我从文档中更改此示例 要直接更新: 我看不到

  • 我有以下代码,我正在尝试决定如何处理错误: 服务器发回一个GraphQL错误对象,并将其发回,使其出现在突变的块中。如果变异成功,组件的数据将使用参数更新,但我看不到处理错误的等价方法。 理想情况下,我希望更新块中的Apollo缓存,但在这一点上,我甚至不能向组件或状态注入道具。 最终的结果是在Register组件上设置一个prop/state,它显示了一个带有条件呈现的错误消息组件。一种方法可以

  • 下面列出了 AutoHotkey 当前开发分支(也称为 AutoHotkey_L)新增的功能。 对于较旧的变更,请参阅存档变更。 1.1.15.01 - 2014 年 6 月 30 改变内置的错误和警告对话框为置顶。 修正 Until 不会从递归的文件和注册表循环中中断的错误。 1.1.15.00 - 2014 年 5 月 4 日 添加 A_OSVersion 值 WIN_8.1。 改变 Hotk

  • 问题内容: 我开发了一个使用GoogleMap的应用程序。我刚刚在Eclipse中更新了Android插件(带有Android L库),并重新导入了GooglePlayService库等。 因此,我重新编译后,在手机(4.4.2中的Sony Xperia Z),GenyMotion Emulator(4.4.2),Nexus 7(4.4.2)上都可以正常工作。但是,它不能在两个Samsung Ga

  • 与其他包管理器(如)相比,我发现当更新与给定项目相关的包时,有一种奇怪的行为。 还根据留档,和选项 根据composer.json将依赖项升级到最新版本,并更新composer.lock文件。 事实上,正确地更新了新的包版本号。但是没有被修改,并且列出了旧的版本过低的包。 为什么会发生这种情况?是我做错了什么,还是这就是应该怎么做的?如果是这样的话,为什么两个文件中的一个是最新的,而另一个不是最新

  • 单击应用程序中的“验证”按钮后,我需要将列的值从“0”更改为“1”。 默认情况下,该列保存为“0”。 我需要找到发票的正确ID并更新此值。所以我尝试了这个代码,但是我的更新功能不起作用。 视图:(每个按钮都有我的发票ID) 控制器:(从输入值中查找Id发票) 路线: 错误: 没有模型[App\发票]的查询结果。 编辑谢谢。。。