问题标签 [apollo-link-state]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apollo - 如何处理 apollo-link-state 中的嵌套状态(类似于 Redux 的 combineReducers)
如果我们看一下todos 示例,假设应用程序有多个视图(一个 TodoList 页面和另一个页面)。
因此,在状态/存储/缓存的顶层,它实际上只是一个具有自己状态的视图,而不是直接引用待办事项数组的“待办事项”。
在该视图中,我们将定义待办事项列表和可见性过滤器 - 所以状态/存储/缓存不会像这样:
但作为:
它甚至可能被隔离在自己的数据“模块”中,就像这里建议的那样:https ://medium.com/@alexmngn/how-to-use-redux-on-highly-scalable-javascript-applications-4e4b8cb5ef38 :
应用程序范围的状态将存储在更远的级别:
我们可以通过 Redux 中的 reducer 组合轻松实现这一点,如下所示:
从内部开始:todos 将有自己的 reducer,它组合在 data reducer 中,它在 TodoList reducer 中与键“data”组合。TodoList reducer 将再次组合到场景 reducer 等中直到顶部,以使嵌套状态反映项目的文件夹结构。
但是,如果没有在单个“TodoList”解析器中定义所有内容,那么使用 apollo-link-state 和解析器如何实现这样的事情呢?
附加问题:
一旦您离开,您将如何清除 TodoList 状态?在 Redux 中,我猜你会触发一个动作来清除给定的状态片段。
附言
stackoverflow 中缺少“apollo-link-state”和“apollo-link”标签。也许代表> 1500的人可以添加这些?
reactjs - 从 iframe 更新本地存储后强制重新渲染组件
我正在使用 React 和 Apollo 构建一个 Shopify 应用程序,apollo-link-state
用于管理本地数据存储。
由于 Shopify 嵌入式应用程序的完成方式,我最终从模式更新本地数据存储,从技术上讲,它是一个 iframe,指向与我的应用程序相同的 URL。
我的问题是主应用程序没有意识到本地商店已更新(来自 iframe),因此不会重新渲染组件。
有没有办法手动强制apollo-link-state
检查数据是否已更改?
apollo-server - apollo-cache-inmemory 的驱逐规则是什么?
据我了解,缓存中的任何内容都是短暂的,并且受制于某种驱逐规则,例如 LRU。在这种情况下,如果我们使用内存缓存和 apollo-link-state 来代替 redux 或 vuex,我们如何保证某些状态不会在运行应用程序的过程中被驱逐?
graphql - 只需从 Apollo 缓存中查看/读取值
我正在尝试执行我认为是一项简单的任务。我有一个搜索框,它成功地使用 client.writeQuery 将项目添加到缓存中。它看起来像这样:
这按预期工作,因为我可以使用 Apollo Chrome 工具并在我键入时看到它在缓存中设置和更新。这不是我需要保留在数据库中的值。
我想要做的就是让它被另一个组件读取并在查询中使用它。我查看了大量的文档和教程,但对我来说似乎不是很简洁或清晰。我有另一个组件,它有一个 Query 组件,它接受该字符串并使用它来搜索。我也知道这可以正常工作,因为在我使用 Apollo Link State 之前,我只是让它在 React 状态下使用一个值。
如何让这个 React 组件像使用 React 状态一样观看和使用这个 Apollo 缓存值?后续组件看起来像这样:
调用 MAIN_QUERY 的 Query 组件只是将返回的数据传递给负责呈现结果的组件。任何帮助都将不胜感激,因为我认为很容易解决的这个小问题随着学习 Apollo/GraphQL 的进展而减慢。谢谢。
apollo - cache.readQuery 使用@client 引发:无法读取未定义的属性“种类”
我创建了非常简单的“登录”页面,该页面应该将“电子邮件”和“密码”存储在本地缓存中,然后在提交时在控制台上显示存储的值(这是通过 resolvers.js 中的突变完成的)。
将电子邮件和密码值保存到缓存中似乎工作正常,但每次我尝试从缓存中读取值时,我都会收到“网络错误:无法读取未定义的属性‘种类’”。任何线索有什么问题?
graphql - 从查询数据派生的阿波罗链接状态默认值?
注意:这是我之前关于Apollo GraphQl 存储派生数据的问题的后续问题
我apollo-link-state
用来存储从查询数据派生的数据。在此示例中,来自 db 的查询数据包括图形上的一些 (x,y) 点,派生数据是斜率、移动平均线、加速度等。
我的 React 绘图组件需要原始数据和派生数据的不同组合。有些只需要原件。
我只需要计算一次派生数据,并且只在我query
为它计算时。
Apollo 网站上的示例似乎暗示需要首先触发突变,但这对我来说似乎是错误的,因为使用此派生数据的每个组件都需要首先触发突变以确保它已初始化。我不想在需要数据的任何地方进行查询和突变。
所以我的问题是:我可以/应该使用query
解析器apollo-link-state
还是有更好的思考方式?
更新:我认为他们的异步示例可能是我需要的,但我需要完成它。
reactjs - Apollo 链接状态与内置 React 状态
state = {}
我在考虑在使用 apollo 链接状态时是否应该使用 React 内置状态。我是否应该在阿波罗链路状态中保留我本地状态的所有内容?让我给你举个例子:
我有一个<Modal>
具有状态的组件:
上面的“状态”应该保持在 apollo 链接状态还是 React 内置状态?
ios - React-Native + Apollo-Link-State + AWS Appsync:默认值不存储在缓存中
我为此苦苦挣扎了好几天。
一个月前,我已经使用 AppSync 成功配置了 Apollo-Link-State,并开始添加默认值和解析器,如下所示:
这么久了(我正在调用@client 突变并围绕我的应用程序进行查询)。
但现在我正试图在我的链接状态中添加其他数据(其他一切都保持不变):
而且我的缓存没有更新。我是说 :
currentUser
仍然包含__typename: 'CurrentUser', username: '', thumbnailUrl: '
但不包含foo: 'bar'. And the cache doensn't contains
hello: 'bar' or
userSettings`。
更令人困惑的是,如果我给username
或thumbnailUrl
喜欢一个值username: 'joe'
,缓存实际上反映了这种变化!(同时忽略我所有的其他修改)
我尝试了这个实验的所有变体并清除了所有缓存(甚至在新同事的计算机上运行它以确保它们不涉及脏缓存)。
我完全一无所知。
语境 :
- 它发生在iOS模拟器中
- 我正在调试观看 appsync 的 redux 缓存
- 阿波罗缓存内存:1.2.8
- 阿波罗客户端:2.3.5
- 阿波罗链接:1.2.2
- 阿波罗链接状态:0.4.1
- aws-appsync:1.3.2
更新:实际上 currentUser 既不是从默认值存储的。当调用突变时,它会进入缓存。
reactjs - 我需要将我的 Apollo 客户端缓存设置为默认值
我有一个使用 Apollo 客户端的 React 应用程序。我正在使用apollo-link-state
并且apollo-cache-persist
需要在我的应用程序中调用时将我的商店重置为其默认值client.resetStore()
。
文档说,在创建客户端时,您应该调用client.onResetStore(stateLink.writeDefaults)
它,这将完成这项工作,但writeDefaults
由 Apollo Link State 公开,因为我正在使用 Apollo Boost,因此我无法直接访问它。
这是我的 Apollo 客户端代码:
graphql - Apollo Link State 中的默认值的目的是什么?
为什么要这样做:
在此:
我可以看到后一种方法的优点是:
- 它更类似于在服务器上编写解析器
- 它通过简单地返回一个承诺来支持异步
- 它充当默认值,因为根据我目前的理解,解析器仅在缓存未命中时调用。
我看不出使用以前的defaults
API 有什么好处,但我敢肯定有一个原因,否则它就不会存在?