Сохранять изменения вложенного состояния в локальном хранилище - PullRequest
0 голосов
/ 02 мая 2019

Итак, я следовал учебному пособию, чтобы сохранить состояние избыточности в локальном хранилище.https://egghead.io/lessons/javascript-redux-persisting-the-state-to-the-local-storage

Однако, что если я создам свой магазин следующим образом с редукторами:

 const store = createStore(rootReducer, initialState)

И корневой редуктор представляет собой комбинированные редукторы:

 const rootReducer = combineReducers({
    auth: AuthStore,
    content: contentReducer,
    pages: pageReducer,
 }

И каждый редуктор имеет свое собственное состояние / initialState, например, contentReducer создается следующим образом:

const initialState = {selected, search}
const contentReducer = (state = initialState, action) => {
   switch (action) {
     case SELECT :   
       return {
         ...state,
         selected: action.payload
     case SEARCH: 
       return {
         ...state,
         search: action.payload
       }
   }
 }

Если я буду следовать учебному пособию, тогда я могу сделать

 const saveSelected = (state) => {
    try {
        const serializedSelected = JSON.stringify(state);
        localStorage.setItem('selected', serializedSelected)
    } catch (err){
        console.log(err)
    }
 }
 store.subscribe(() => {
    saveSelected(store.getState().content.selected)
 })

Однако, поскольку у меня естьмного других редукторов (я приведу только несколько примеров выше) и, следовательно, в хранилище отправлено много действий, я не хочу, чтобы магазин продолжал запускать функцию подписки каждый раз, когда отправляется какое-либо действие.Я хочу, чтобы магазин подписывался на изменения только при обновлении конкретного store.getState().content.selected.Как я могу это сделать?

1 Ответ

0 голосов
/ 05 мая 2019

Вы можете использовать промежуточное ПО Redux, которое позволяет зарегистрировать функцию, которая вызывается на каждом dispatch. Вы получаете ссылку на объект хранилища, так что вы можете проверить состояние store.getState().content.selected и действовать соответственно. Смотрите подробности и примеры здесь .

...