通过apollo查询传递Apollo客户端缓存数据

时间:2018-10-19 08:37:27

标签: graphql react-apollo apollo-client apollo-link-state

我有两个查询:

const GET_FILTERS = gql`
  query getFilters {
    filters @client {
      id
      title
      selected
    }
  }
`

const GET_POSTS = gql`
  query getPosts {
    posts {
      id
      author
      status
    }
  }
`

第一个使用apollo-link-state从本地状态获取数据,第二个是外部调用。

我有一个HOC来获取这样的帖子设置:

const withPosts = (Component) => (props) => (
  <Query
    query={GET_POSTS}  
  >
    {({loading, data, error})} => {
      if(loading) return null
      if(error) return null
      return <Component {...data} {...props}/>
    }}
  </Query>
)

获取帖子很好,但是我想做的是在每次调用GET_FILTERS查询时添加从GET_POSTS查询返回的内容?

我可以做的一件事是将withPost换成另一个,假设withFilters HOC,然后将结果作为变量传递给GET_POSTS查询,但我一直在想是通过某种上下文访问数据的任何其他方式,例如仅使用cache.readQuery HOC访问withPost

1 个答案:

答案 0 :(得分:1)

Apollo为HOC pattern提供了“本机”工具,您可以compose许多(命名)查询和变异来增强组件。恕我直言,它比使用查询/诱变组件更具可读性和功能。

您可以通过data.fetchMore将查询的(过滤器)值作为变量传递-当然,您可以将查询组件用于“内部查询”。

在可以使用查询'cache-first' fetchPolicy选项时,不需要直接使用缓存。