Передача данных кэша клиента Apollo с помощью запроса Apollo

У меня есть два запроса:

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 используя только withPost HOC.

1 ответ

Решение

Apollo имеет "нативные" инструменты для шаблона HOC, вы можете составлять множество (именованных) запросов и мутаций для улучшения компонента. ИМХО, это гораздо более читабельно и мощно, чем использование компонентов запроса / мутации.

Вы можете передавать запрашиваемые (фильтровать) значения как переменные через data.fetchMore - конечно, вы можете использовать компонент запроса для "внутреннего запроса".

Непосредственное использование кэша не требуется, в то время как можно использовать опцию запроса "cache-first" fetchPolicy.

Другие вопросы по тегам