redux-persist - как внести в белый список вложенное поле состояния?

Я хочу сохранить в памяти один полный редуктор и только одно поле из другого редуктора. Как я могу это сделать? Я нашел, например, эта проблема с gh, но все попытки (из ссылки gh и других источников) обернулись быть неудачей.

codeandbox пример

const persistConfig = {
  key: "root",
  storage,
  whitelist: ["first"],
  transforms: [createWhitelistFilter("second", ["counter"])]
};

Он работает для first reducer, со вторым ничего не происходит, когда я хочу сохранить только counter поле из reducer.

Любые идеи?


person sosick    schedule 21.07.2020    source источник
comment
Привет, вы хотите сохранить как первое, так и второе значения счетчика? т.е. при обновлении вам нужно, чтобы они оба имели сохраненные значения?   -  person Yash Joshi    schedule 25.07.2020
comment
Я хочу сохранить в хранилище только одно поле от конкретного редуктора, а не весь редуктор.   -  person sosick    schedule 26.07.2020


Ответы (1)


Понимая проблему, я написал специальный преобразователь, чтобы сохранить поле счетчика для второго редуктора. И избегайте сохранения всего объекта.

Я использовал специальный трансформатор для достижения этой функциональности. Подробнее об этом можно узнать здесь

Решение

const whiteList = createTransform(
  (inboundState, key) => {
    if (key === "second") {
      // This is saving to storage
      // Save only the counter field for second reducer
      return inboundState.counter;
    }
    return inboundState;
  },
  (outBoundState, key) => {
    if (key === "second") {
      // Receiving data from storage
      // add the saved counter field in reducer object
      return {
        name: "",
        counter: outBoundState
      };
    }
    return outBoundState;
  }
);

const persistConfig = {
  key: "root",
  storage,
  transforms: [whiteList]
};

Мы только позволяем полю счетчика экономить на хранилище, и при получении мы добавляем его к значению объекта.

Вот рабочая песочница. .

person Yash Joshi    schedule 26.07.2020