Обнаружить изменения в магазине - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу сохранить данные каждого редуктора в localStorage в виде пар ключ-значение

  1. UserReducer: {isLoding: true, ....}
  2. OrderReducer : {isRecieved: false, ....}

Поэтому, если какие-либо изменения произойдут в любом из редукторов, я хочу установить обновленные данные в локальном хранилище.Я думаю, что могу сделать этот store.subscribe, но как я мог узнать, какой редуктор был изменен, так что я могу установить все данные редуктора в localStorage.Нужна помощь.Спасибо:)

Ответы [ 5 ]

0 голосов
/ 13 декабря 2018

Вы можете использовать redux-watch , чтобы прослушать изменения в хранилище redux

, например,

// ... other imports/requires
import watch from 'redux-watch'

// assuming you have an admin reducer / state slice
console.log(store.getState().admin.name) // 'JP'

// store is THE redux store
let w = watch(store.getState, 'admin.name')
store.subscribe(w((newVal, oldVal, objectPath) => {
  console.log('%s changed from %s to %s', objectPath, oldVal, newVal)
  // admin.name changed from JP to JOE
}))

// somewhere else, admin reducer handles ADMIN_UPDATE
store.dispatch({ type: 'ADMIN_UPDATE', payload: { name: 'JOE' }})

, это может помочь вам.

0 голосов
/ 13 декабря 2018

Для этого вы можете использовать React Component.Подключите его к магазину и используйте для записи в localStorage вместо рендеринга чего-либо.Имхо, это было бы легче написать, чем связующее ПО.

0 голосов
/ 13 декабря 2018

Один из способов сделать это - создать редуктор lastAction, в котором будет храниться значение последнего отправленного действия.Затем в store.subscribe вы можете сделать:

    let nextState = store.getState();
    let dispatchedAction = nextState.lastAction.type;

И когда вы знаете последнее отправленное действие, вы можете обновить локальное хранилище в зависимости от этого типа действия.

0 голосов
/ 13 декабря 2018

Я думаю, что вы не могли знать об изменениях в магазине.subscribe.

Последнее место, когда вы знаете, что изменения - это действия.

  1. Вы можете установить постоянную логику для редукторов.Но, может быть, вам не стоит вводить побочный эффект в ваш редуктор.

Таким образом, у вас есть два варианта, если исключить первый.

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

Создайте промежуточное промежуточное ПО и запишите отдельные действия.Вы можете скопировать шаблон редуктора, чтобы сохранить только измененный объект.

Вы можете использовать подписку для варианта 2. Вы можете использовать промежуточное программное обеспечение для варианта 2 и варианта 3.

Я придумал еще одно решение.

Вы можете сделать упорство в своем создателе действий с Redux Thunk или с Redux Saga.
0 голосов
/ 13 декабря 2018

Вы можете создать промежуточное ПО redux, оно будет срабатывать при каждом отправлении действия.В промежуточном программном обеспечении вы можете поставить условную проверку, чтобы увидеть, совпадают ли предыдущий и следующий магазин.Если нет, вы можете обновить локальное хранилище.

Я нашел это полезным для создания промежуточного программного обеспечения.И это довольно просто.

...