React GraphQL Apollo - 如何一次多次获取

时间:2017-05-08 00:00:35

标签: reactjs graphql apollo react-apollo

我有一个组件,它通过一个带有参数的查询来获取数据。我想让这个组件调用这个查询两次,使用基于道具的不同参数(所以可能以后甚至更多次)。我怎样才能做到这一点?这是我的代码示例:

...
const getUser = gql`
  query getUser($last_name: String!, $first_name: String!) {
    user(last_name: $last_name, first_name: $first_name) {
      id
      last_name
      first_name
    }
  }
`
export default graphql(
  getUser, {
  options: (props)=>{
    return {
    variables: {
      last_name: ...something from props,
      first_name: ...something from props
    }
  }
}
})(ComponentClassName)

通常我会根据道具获取相应的用户。没关系。但现在,我想使用此组件并能够获取更多用户,而无需更改后端和更多前端。至少我需要能够通过用户要获取的道具来定义,如果是一个或多个。我怎样才能做到这一点?感谢。

2 个答案:

答案 0 :(得分:0)

听起来你正在使用这个组件(我们称之为status = "pending","approved","rejected")作为另一个包含用户列表的组件(让我们称之为User)。

我在这里看到两个解决方案:

  1. 如果UserList查询用户列表并获取UserList,后来将其作为道具传递给每个username组件,您仍然可以使用User查询。出于性能原因,并且由于您使用的是Apollo,因此启用批处理(https://dev-blog.apollodata.com/query-batching-in-apollo-63acfd859862)可能是个好主意,因为您将为每个用户进行一次查询。

  2. 您可以获取getUser中每个User所需的所有数据,然后将其作为道具传递下来。不会在每个UserList组件中进行任何查询。

  3. 希望有所帮助!

答案 1 :(得分:0)

我认为你在这里寻找的是compose。有了它,您可以在一个组件上执行多个graphql操作。我实施了一个here,我同时编写了querymutation

你可以用它来组合两个查询,因为它们都有不同的道具。