Каковы методы удаления только некоторых запросов из кеша в 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')&&param_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,

0

Ответов: 0

Каковы методы удаления только некоторых запросов из кеша в 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')&&param_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, аполлон, реагируют-аполлон,
Похожие вопросы
Яндекс.Метрика