apollo-server - apollo-cache-inmemory 的驱逐规则是什么?
问题描述
据我了解,缓存中的任何内容都是短暂的,并且受制于某种驱逐规则,例如 LRU。在这种情况下,如果我们使用内存缓存和 apollo-link-state 来代替 redux 或 vuex,我们如何保证某些状态不会在运行应用程序的过程中被驱逐?
解决方案
从 Apollo Client v2 开始,没有任何驱逐。根据评论,它可能在 v3 的路线图上。
你可以查看这些 Github 问题进行讨论:
- https://github.com/apollographql/apollo-client/issues/3965
- https://github.com/apollographql/apollo-feature-requests/issues/4
- https://github.com/apollographql/apollo-client/issues/621
至于更一般的问题——在大多数情况下,不需要这样的保证。原因是由于 Apollo 客户端和 React 设计,缓存对应用程序是完全透明的。当您使用Query
组件时,您的子组件将接收数据。此时,您可以决定数据是否可用。
例如,如果您决定在数据不可用时渲染加载微调器,那么理论上每次驱逐数据时,您的组件都会重新渲染并显示微调器。
我可以想象一个情况,你可能有一个长时间运行的异步操作(如果它不是异步的,那么由于 JavaScript 执行模型,数据不能在中间被驱逐)。在这种情况下(很少见,但可能),您可能会先将数据复制到局部变量等。
推荐阅读
- html - 分页符在 HTML 中对我不起作用
- botframework - 将状态信息从助手传递到技能的最佳方式
- mysql - 为什么 Laravel 5.8 迁移在不更改表名的情况下不起作用?
- ruby - 如何从ruby中的多行字符串中获取第n行到最后一行的数据?
- python - 将总分钟数中的小时和分钟分配给元组;寻找简洁的方法来缩短代码而不使用 datetime 模块
- r - 带约束的最小二乘
- reactjs - 带有可加载组件的服务器端渲染不起作用
- flutter - 不推荐使用祖先StateOfType,而是使用 findAncestorStateOfType
- spring-boot - Spring LDAP 安全性 - BeanCreationException
- r - 在 Rmarkdown 中编织到 pdf 时,代码离开页面