Ответ 1
В вашем случае вы можете использовать метод apollo client.resetStore();
Он очистит предыдущий кеш, а затем загрузит активные запросы.
Я использую apollo graphql в своем обработанном приложении. Скажем, у меня есть следующий запрос:
query ListQuery($filter: String!) {
items(filter: $filter) {
id
name
}
}
Этот запрос позволяет мне запрашивать список элементов, используя фильтр. Скажем, я использовал строку фильтра A, а затем использовал строку фильтра B. Кэш теперь будет содержать две записи: ListQuery (A) и ListQuery (B).
Теперь скажем, я использую мутацию для добавления нового элемента. Как удалить все кешированные запросы из кеша? Поэтому в этом случае я хочу удалить из кеша как ListQuery (A), так и ListQuery (B).
Как я могу это сделать?
В вашем случае вы можете использовать метод apollo client.resetStore();
Он очистит предыдущий кеш, а затем загрузит активные запросы.
Похоже, что вам нужно, refetchQueries
опция refetchQueries
/prop была установлена в массив строк имен запросов. В документации говорится, что:
Если options.refetchQueries - это массив строк, то Apollo Client будет искать любые запросы с теми же именами, что и предоставленные строки, и будет перевыпускать эти запросы с их текущими переменными.
Так что в качестве примера использования graphql
HOC вы можете попробовать сделать:
function SomeComponent(props) {
const performMutation = () => {
props.doStuff({ refetchQueries: ["ListQuery"] })
.then(/* ... */)
.catch(/* ... */)
}
return (/* ... */)
}
export default graphql(DO_STUFF, { name: "doStuff" })(SomeComponent)
Или с компонентом Mutation
:
function SomeComponent(props) {
return (
<Mutation
mutation={DO_STUFF}
refetchQueries={mutationResult => ["ListQuery"]}>
{(doStuff, { loading, error }) => {
/* ... */
}}
</Mutation>
);
}
Если это как-то не делает то, что вам нужно, есть также обходной путь, использующий опцию update
.
Надеюсь это поможет.
Читайте о политиках выборки options.fetchPolicy
--Edit: -
Но это всего лишь хитрость, если вы хотите сбросить только один запрос. Чтобы сбросить все хранилище, смотрите ответ @Nitin: установите fetchPolicy только для сети. Обновить запрос. Верните его на ваш выбор.