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

invalidateQueries vs setQueryData 在 graphQL 中突变,在单个页面 React 应用中使用 react 查询?

相野
2023-03-14

我有一个graphQL API。这意味着我可以定制我想要的突变反应。

当然,我需要我的UI与新数据同步。不过,我不确定什么是实现这一目标的最佳选择。

备选案文1

https://react-query.tanstack.com/guides/invalidations-from-mutations

  • 除了成功状态之外,不返回任何来自突变的内容
  • 使用validateQueries重新蚀刻变异后应该陈旧的相关查询

备选案文2

https://react-query . tan stack . com/guides/updates-from-mutation-responses

  • 从突变中返回完整的突变对象
  • 使用 setQueryData 合并对当前查询数据的突变响应

每种方法的优缺点是什么?在处理graphQL后端时,是否推荐使用另一种?

React查询似乎表明无效查询应该是最好的方法。请参阅下面的引用。我的意思是,我可以让对象从突变中返回,但它不是图形QL灵活endpoint中的“自动”。您可以选择。

在处理更新服务器上对象的突变时,新对象通常会在突变的响应中自动返回。我们可以利用 mutation 函数返回的对象,并使用 Query Client 的 setQueryData 方法立即使用新数据更新现有查询,而不是重新提取该项目的任何查询并浪费对已有数据的网络调用:

我认为不从突变中返回并使用validateQueries将使我的突变更加简单和灵活,因为它们可以在不同的上下文中使用,在每种情况下使不同的查询无效。

我想除了避免一个额外的网络请求之外,我看不到任何其他支持选项2的理由。

这适用于 React 单页 Web 应用程序。这里的最佳实践是什么?

共有1个答案

丁豪
2023-03-14

刚刚在官方文件中发现了一个非常好的帖子。

https://react-query.tanstack.com/community/tkdodos-blog#12-mastering-mutations-in-react-query

链接到:

https://tkdodo.eu/blog/mastering-mutations-in-react-query

我想默认的做法是使用< code>invalidateQueries并在必要时使用< code>setQueryData。

 类似资料:
  • 我有一个apollo包装的组件,它应该为我的组件提供来自github graphql v4 api的响应数据。我打算使用应用程序另一部分的字符串(SEARCH\u QUERY)来用于我的gql查询,但github不断返回未定义的字符串。我在关注阿波罗官方文件http://dev.apollodata.com/react/queries.html#graphql-选项。我看不出我做错了什么。 这个没

  • 但是,当我想使用从上一次查询中获得的Id进行第二次查询并使用该Id作为筛选器时,该怎么办?当我像以前一样在ExampleComponent中返回另一个graphql查询时,我会得到一个错误,即我没有返回有效的react组件。那我该怎么做呢? 提前感谢!

  • 和 Flux 类似,Redux 也是需要注册一个回调函数 store.subscribe(listener) 来获取 State 的更新,然后我们要在 listener 里面调用 setState() 来更新 React 组件。 Redux 官方提供了 react-redux 来简化 React 和 Redux 之间的绑定,不再需要像 Flux 那样手动注册/解绑回调函数。 接下来看一下是怎么做到

  • 我的变异查询: 查询变量: GraphQL模式(突变定义): 我尝试同时使用GraphiQL接口和apollo-client来发送带有变量的请求,但出现了相同的错误。有什么想法吗?

  • 问题内容: 我有一个使用两个第三方服务的React应用程序。该应用已开始使用。 这两个服务都需要一个API密钥。 一键通过脚本标签提供,如下所示: 另一个API密钥用于请求中。我将实际密钥存储在一个常量中,并用它来构成请求。像这样: Google 在处理API密钥方面的最佳做法提示是: 不要将API密钥直接嵌入代码中 这使我想到了第一个问题: 1.如何在中使用变量? 在我的文件中,我有两个看起来像

  • 我有一个React应用程序使用了两个第三方服务。应用程序是使用启动的。 这两个服务都需要API密钥。 一个键是通过脚本标记提供的,如下所示: 这就引出了我的第一个问题: 1.如何使用中的变量? 在我的文件中,我有两个如下所示的标记: 与此问题相关的是,将API密钥存储在常量中是否安全,就像我对所做的那样? 谷歌还表示: 不要将API键存储在应用程序源树中的文件中 说我照谷歌说的做 ...将它们存储