将 redux 嵌套状态更改持久化到本地存储

Posted

技术标签:

【中文标题】将 redux 嵌套状态更改持久化到本地存储【英文标题】:Persist redux nested state changes to local storage 【发布时间】:2019-09-20 12:32:51 【问题描述】:

所以我一直在按照教程使 redux 状态持久保存到本地存储。 https://egghead.io/lessons/javascript-redux-persisting-the-state-to-the-local-storage

但是,如果我使用减速器创建这样的商店会怎样:

 const store = createStore(rootReducer, initialState)

而根reducer是一个组合reducer:

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

每个reducer都有自己的state/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)
 )

但是,由于我有更多的 reducer(我只是在上面给出了一些示例),因此有很多动作被分派到商店,我不希望商店在每次分派任何动作时都继续触发订阅功能。我只希望商店在特定 store.getState().content.selected 更新时订阅更改。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用 Redux 中间件,它允许您注册一个在每个 dispatch 上调用的函数。您将获得对 store 对象的引用,以便您可以检查store.getState().content.selected 状态并采取相应措施。查看更多详细信息和示例here。

【讨论】:

以上是关于将 redux 嵌套状态更改持久化到本地存储的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Redux 的情况下将状态保存在本地存储 React 中?

如何在同一个反应组件中使用本地状态和 redux 存储状态?

在 Redux 应用程序中写入 localStorage 的位置?

git:通过命令行执行本地 Git 工作流

使用 redux-persist 持久化嵌套状态对象

React - 将状态保存到本地存储