В приложении вид A обновляет данные в виде B. В представлении B данные запрашиваются диапазоном на основе двух дат. Кэш, потребляемый в представлении B, не обновляется должным образом.
Проблема в том, что обновление кеша было бы слишком сложным для мутации вида A. Я не хочу использовать fetchPolicy: no-cache, потому что запрос на все время, когда навигация в представлении B кажется очень ненужным. Я также не хочу сбросить весь кеш.
Итак, я хочу восстановить запрос на просмотр B, но только при вводе компонента. Для этого я создал функцию, которая находит правильные запросы из ROOT_OBJECT и удаляет их перед отображением контейнера:
static getDerivedStateFromProps(props) {
if (props.client.cache.data.data.ROOT_QUERY) {
let ROOT_QUERY = { ...props.client.cache.data.data.ROOT_QUERY };
let ROOT_QUERY_keys = Object.keys(props.client.cache.data.data.ROOT_QUERY);
ROOT_QUERY_keys.forEach((key) => {
// Everything between quotes is a query params object
const rgx = /(([^]+))/.exec(key),
param_str = rgx&&rgx[1];
// Certain type of query, with params...
if (key.includes('episodes')&¶m_str) {
const param_obj = JSON.parse(param_str);
if (param_obj.after||param_obj.before) {
delete ROOT_QUERY[key];
}
}
});
props.client.cache.data.data.ROOT_QUERY = ROOT_QUERY;
}
return null;
}
Каким будет правильный способ сделать это / добиться желаемых результатов? Какие риски я беру здесь?
javascript,reactjs,apollo,react-apollo,
В приложении вид A обновляет данные в виде B. В представлении B данные запрашиваются диапазоном на основе двух дат. Кэш, потребляемый в представлении B, не обновляется должным образом.
Проблема в том, что обновление кеша было бы слишком сложным для мутации вида A. Я не хочу использовать fetchPolicy: no-cache, потому что запрос на все время, когда навигация в представлении B кажется очень ненужным. Я также не хочу сбросить весь кеш.
Итак, я хочу восстановить запрос на просмотр B, но только при вводе компонента. Для этого я создал функцию, которая находит правильные запросы из ROOT_OBJECT и удаляет их перед отображением контейнера:
static getDerivedStateFromProps(props) {
if (props.client.cache.data.data.ROOT_QUERY) {
let ROOT_QUERY = { ...props.client.cache.data.data.ROOT_QUERY };
let ROOT_QUERY_keys = Object.keys(props.client.cache.data.data.ROOT_QUERY);
ROOT_QUERY_keys.forEach((key) => {
// Everything between quotes is a query params object
const rgx = /(([^]+))/.exec(key),
param_str = rgx&&rgx[1];
// Certain type of query, with params...
if (key.includes('episodes')&¶m_str) {
const param_obj = JSON.parse(param_str);
if (param_obj.after||param_obj.before) {
delete ROOT_QUERY[key];
}
}
});
props.client.cache.data.data.ROOT_QUERY = ROOT_QUERY;
}
return null;
}
Каким будет правильный способ сделать это / добиться желаемых результатов? Какие риски я беру здесь?
00JavaScript, reactjs, аполлон, реагируют-аполлон,