Передача данных кэша клиента 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.