React / Apollo-不同组件中的类似查询?

伊沃

我正在寻找有关使用Apollo,React和Meteor的最佳实践的帮助。

我将Meteor.user()模型链接到Apollo中的模式,由于有了查询组件,我现在可以访问它。我有一个查询,看起来像这样:

gql`
  query User {
    user {
      _id,
      email
    }
  }
`

并由解析器直接提供电子邮件地址来完成此工作。但是,我在不同的地方需要它,对于需要的每个组件,我都在 < Query > 用相同的查询制作另一个组件,然后将粘贴从文件复制到另一个。在我看来,如果我的许多组件都在一次又一次地查询相同的东西,那我就失去了一点。但是,我没有找到解决此“干”问题的方法。还没有那么多示例,包括react apollo的Query组件,因此,如果有人可以帮助我,将不胜感激。

丹尼尔·雷登(Daniel Rearden)

默认情况下,Apollo客户端使用fetchPolicycache-first这意味着,如果查询结果已经在缓存中,则将从缓存中获取查询结果,并且不会发出网络请求。这样一来,您就可以跨多个Query组件使用相同的查询,而不必担心一遍又一遍地向服务器发出相同的请求。

fetchPolicy如果要覆盖此默认行为,则可以为特定的Query组件指定-例如,也许要始终从服务器获取新数据,在这种情况下,您可能会使用network-onlycache-and-network有关更多详细信息,请参阅文档

注意:一个常见的“陷阱”是缓存使用id(或_id)字段来规范化缓存的结果。这意味着您的查询必须包含id字段(或提供的自定义实现dataIdFromObject)才能查看预期的行为。有关其他详细信息,请参见此页面

就保持干燥而言,通常的做法是将查询存储在一个或多个单独的模块中,然后根据需要导入它们。因此,您可以拥有一个queries.js像这样文件:

import gql from 'graphql-tag'

export const USER_QUERY = gql`
  query User {
    user {
      _id,
      email
    }
  }
`

graphql-tag带有一个加载程序,如果您使用的是Webpack,则可以直接从.graphql / .gql文件导入查询。这里查看食谱还有一个babel插件,可以有效地完成相同的操作(在此处签出)。这些方法中的任何一种都应减少代码中的冗余。

编辑:正如@ camba1的答案中指出的那样,片段也可以用来使您的查询干燥:

query User {
  user {
    ...userFields
  }
}

fragment userFields on User {
  _id,
  email,
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使Apollo查询组件在React中可重用

React / Apollo共享查询状态

React-Apollo,不要在组件加载时运行查询

使用Apollo Client动态设置React组件的GraphQL查询

React Apollo:从组件状态动态更新GraphQL查询

React Apollo查询和突变组件不会获取新数据

没有React <Mutation>组件的Apollo突变

Apollo GraphQL React-如何点击查询

React Apollo-进行多个查询

React Apollo从状态动态创建查询

使用Apollo React钩子刷新查询

用React-Apollo查询的不同方法

React apollo 从缓存中获取数据

如何在TypeScript中为React Apollo查询组件编写HOC?

如何在Apollo / graphql / react的refetchQuery期间将ID传递给未在组件中调用的查询

将参数从React-router传递到Apollo Client 2.1中的查询组件

在react-apollo的Query组件中设置状态

useReducer 在 React 的不同组件中显示初始状态

React Native 中不同组件之间的 Signleton

React Apollo显示“ react-apollo仅支持查询,订阅或每个HOC突变”错误

Next / React-Apollo:当查询来自getInitialProps时,React道具未连接到Apollo缓存

Apollo正在React中混合来自GraphQL查询的结果

使用React Router路由到不同组件以进行类似路由

React组件和Apollo Client无法“实时”运行

与Apollo graphql连接的React组件未重新渲染

react-apollo为组件提供数据和突变

从React-Apollo组件内部设置mobX状态

如何使用 React 中不同组件中的按钮访问组件中的功能?

React 不同组件之间的通信