React 18 仿携程项目【二十九】redux数据持久化插件~redux-persist

数据持久化,一般利用web storage 存储数据(注:此种存储是存储在浏览器中的,而不是服务器上);

数据存储分为临时存储sessionstorage和本地存储localstorage。

 

数据持久化存储步骤:

插件名:

redux-persist(redux-persist": "^6.0.0)

链接:https://github.com/rt2zz/redux-persist

(1)安装插件

npm install redux-persist

(2)store.ts中引入persistStore、persistReducer、storage 

import { persistStore,persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";


const persistConfig = { //redux-persist配置
    key: "root", //命名空间,必选项
    storage,    //数据保存方式,默认是localStorge,也可以使用cookie,必选项
    whiteList: ["userSignIn"]  //白名单,只保存userSignIn数据
}


//组合多个reducer
const rootReducer = combineReducers({
    language: languageReducer,
    productRecommend: productRecommendReducer,
    productDetail: ProductDetailSlice.reducer,
    productSearch: ProductSearchSlice.reducer,
    userSignIn: userSignInSlice.reducer
})

//redux-persist升级配置reducer
const persistedRed  = persistReducer(persistConfig,rootReducer)

//传入rootReducer和中间件函数applyMiddleware(thunk)
// const store = createStore(rootReducer,applyMiddleware(thunk,actionLog,i18nLog));
const store = configureStore({
    reducer: persistedRed,
    //异步处理中间件,保留redux-toolskit默认的getDefaultMiddleware并连接上自定义的中间件
    middleware: (getDefaultMiddleware)=> getDefaultMiddleware({serializableCheck:false}).concat(actionLog,i18nLog),
    devTools: true , //开启redux-dectools插件
})

//redux-persist升级配置store
const persistor = persistStore(store)

//获取store中的所有reducer的数据类型并导出
export type RootState = ReturnType<typeof store.getState>
//提取dispatch数据类型
export type AppDispatch = typeof store.dispatch;

//导出store
export default {store,persistor};

 getDefaultMiddleware({serializableCheck:false})中配置serializableCheck来防止redux-persist报错

(3)index.ts中使用prodiver包裹(PersistGate,是redux-persist针对react-redux生产的一款prodiver,相当于prodiver,包含persistor(必选)和loading(非必选)两个属性)

import rootStore from "./redux/store";
import { PersistGate } from 'redux-persist/integration/react';
import { Spin } from 'antd';


<Provider store={rootStore.store}>
        <PersistGate persistor={rootStore.persistor} loading={<Spin/>}>
             <App />
        </PersistGate>
</Provider>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值