问题标签 [react-apollo-hooks]

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.

0 投票
0 回答
317 浏览

apollo - 如何使用 readQuery 和 writeQuery 从 Apollo GraphQL 客户端删除缓存记录

Apollo GraphQL 团队表示 readQuery 和 writeQuery 适用于 95% 的用例。我正在使用useMutation并且update想要从缓存中删除一个项目而无需调用refetchQueries. 我的代码如下:

从 readQuery 返回的内容让我认为我应该过滤 speaker.datalist 但是当我这样做时,缓存不会更新。

更新缓存以反映从 GET_SPEAKERS 查询中删除的记录的正确方法是什么。

和 GET_SPEAKERS

0 投票
2 回答
3233 浏览

reactjs - 打字稿错误未使用 useState 钩子定义

我是 graphql 的新手,所以我决定遵循本指南

但是查询时出现错误(步骤 7):

这是组件:

但是当我使用它时它可以工作

像这样 :

当然,我已经删除setUsersuseEffect()钩子。

我注意到我必须在我的.tsconfig.json文件中将 strict 设置为 false。

我想知道为什么我不能使用 setUsers 钩子?为什么我得到这个错误以及如何解决它?

谢谢!

0 投票
2 回答
2102 浏览

reactjs - 调用函数后如何获取useLazyQuery挂钩数据

我试图在提交表单/onClick 后调用 useLazyQuery,但由于某种原因,我总是不确定。这是我定义我的钩子的方式;

如何获取someData变量中的查询数据?

0 投票
1 回答
1646 浏览

react-apollo - Apollo 客户端:更新缓存时的 writeFragment 或 readFragment?

updateuseMutation 的钩子中,Apollo 的文档建议使用writeFragment来获取对新添加对象的内部引用。我觉得这很奇怪,因为该对象已经存在于缓存中。所以我测试了它,readFragment果然,它运行良好。在这个用例中是否有使用writeFragmentover的偏好readFragment

示例 1:

https://www.apollographql.com/docs/react/data/mutations/#making-all-other-cache-updates

该页面的摘录:

在 cache.writeFragment 的帮助下,我们获得了对添加的 todo 的内部引用,然后将该引用存储在 ROOT_QUERY.todos 数组中。

示例 2:

https://www.apollographql.com/docs/react/caching/cache-interaction/#example-updating-the-cache-after-a-mutation

该页面的摘录:

该评论已通过 useMutation 添加到缓存中。因此,cache.writeFragment 返回对现有对象的引用。

我还在 Apollo Client 的讨论板 ( https://github.com/apollographql/apollo-client/discussions/7515 ) 上发布了这个问题,但没有得到回复。

0 投票
0 回答
261 浏览

reactjs - 变异不是函数吗?

我想通过使用 graphql 来使用社交登录。我想通过使用 kakaologin 函数从社交登录中获取 accessToken,然后我使用它通过使用 kakakoLoginMutation 函数来制作令牌。

我尝试将 const 名称设为 access_token(=="123"),如果我成功通过 kakao 登录,我会通过 authObj 获得 accss_token。然后我使用 setAccess_token(useState) 将其设置为 const access_token。

console.log(authObj.access_token) 显示正确的字符串。但在 setAccess_token(authObj.access_token) 之后,console.log(access_token) 显示“123”。

我认为 console.log(access_token) 必须显示不是“123”其他字符串。另一个错误是 KakaoLoginMutation is not a function。


查询.js

0 投票
0 回答
280 浏览

reactjs - UseEffect 不会在第二次更改时触发,但会在启动时触发两次。(React hooks 和 apollo-graphql hooks)

useEffect不会在第二次更改时触发,但会在启动时触发两次(React 挂钩和 apollo-graphql 挂钩)。在 console.logs 中,我描述了何时触发更改以及何时不触发更改。我没有更多线索要补充。

这是我的页面(Next.js 页面)

以及我获取道具并触发 refetchSessions 的组件部分。

钩子是用 graphql-codegen(generated/graphql.tsx) 生成的:

这是架构(graphql/hall.graphql):

0 投票
1 回答
135 浏览

highcharts - 如何使用 react-hooks (useEffect) 缓冲流数据以便能够一次更新另一个组件以避免多次重新渲染?

如何使用 react-hooks (useEffect) 缓冲流数据以便能够一次更新另一个组件以避免多次重新渲染?

以下信息只是完整理解的附加背景。

最后,总体问题是如何通过使用 react useEffect 钩子去抖动 Apollo-Client graphql 订阅来减少 highcharts 重新渲染

我正在使用 apollo-client 构建一个反应应用程序来加载数据。我使用 graphql 订阅,因为数据是惰性的,并且会实时更新,因此可以流式传输新数据。目前我正在使用 useEffect ,它为每个到达的新数据调用一次。

假设我有一个 ui 组件,例如 highcharts(带有 react-highcharts-official 包装器的具体 HighStock)图,它具有较长的重新渲染重绘时间,但能够一次应用多个更改。因此,我喜欢通过合并和去抖动来减少重绘,因此它会立即更新。

什么是反应钩子在一定时间内收集数据的最聪明的方法,例如在某些数据到达后将每个响应的滑动窗口延长 200 毫秒,但最多将其延长到 1 秒。在进行重绘时,不要开始另一次重绘。因此,如果有新数据到达,则最多每秒重绘一次图表,但如果较长时间没有数据到达,则更早。将所有更改应用到 Highcharts 并一次性渲染。

使用 angular 和 rxjs,我将创建一个 mergeMap 以使用 Chart.setData(data, false) 将每个数据提供给 Highcharts 以提供数据而无需重新渲染。如果我要随着时间的推移收集数据,我会使用缓冲区。此外,在没有新数据但最近每 1 秒重绘 200 毫秒后,将订阅去抖动和小跑以重绘图表(或发出缓冲区)。

0 投票
0 回答
122 浏览

graphql - 如何使用缓存优先/缓存和网络在缓存失效后重新获取 apollo watchQuery

我有一些很少更新的元数据,但它可以偶尔更新一次。在我的应用程序中,用户非常频繁地访问这些信息,这给我的服务器带来了相当大的负载。

我只想重新取回它,例如每天一次以检查是否有变化。

我的预期行为是 watchQuery 应该立即返回,即使缓存已过期。仅当缓存过期时,它才会重新获取以更新缓存

这有可能吗?

我的第一个想法是告诉 cache-and-network 或 cache-first 仅在最后一次网络检查超过一天或缓存失效时才使用网络,但在文档中找不到任何内容。

Thx 我非常感谢您的专业知识。

0 投票
0 回答
396 浏览

reactjs - UseMutation 和 RefetchQueries:避免多次调用 react-apollo 的 api

在使用 RefetchQueries 进行变异时,我在页面中遇到了一些问题。

我有一个带有复选框的项目列表

ItemList(父组件),ToolBar(子组件)

在子组件中,我有一个删除按钮,可以在从项目列表中选择项目后单击该按钮。我通过道具将选定的项目传递给子组件。

单击删除按钮时,它应该调用getTransactions查询。根据结果​​,如果有任何交易可用,我必须显示模式并单击“确定”我必须删除这些项目。

在删除多个项目时,我必须检查所选项目是否有可用的交易。

现在删除工作正常,但突变 api 调用多次,查询 api 调用多次。我无法弄清楚。

如果我更改 if(data) 中的 if else 语句,则会给出错误cannot update during state transition

请帮助实现目标。

0 投票
0 回答
142 浏览

react-native - React Native应用程序中的应用程序状态更改时如何防止apollo useQuery钩子重置?

我使用 Apollo 客户端在我的 React Native 应用程序中访问我的 GraphQL 端点。

在各种屏幕中,我使用 useQuery 挂钩查询数据。这是我的一个屏幕中的示例:

我面临的问题是,每次我离开应用程序(从而将应用程序置于后台)时,查询都会重置。当我回到应用程序(从而将应用程序置于前台)时,加载设置为 true,数据设置为未定义。

这会产生一种行为,每次用户离开应用程序并返回时,屏幕似乎都会重新加载。理想情况下,屏幕不会重新加载,用户只需从她离开的地方继续。

如何防止每次应用状态更改时重新加载查询?非常感谢!