react-redux持久化储存-redux-persist

redux-persist插件

配置store.ts

import { createStore } from 'redux';
import {AllReducers} from './reducers/index';
/引入持久化储存插件
import {persistStore, persistReducer} from 'redux-persist';
// 本地储存
// import storage from 'redux-persist/lib/storage';
// 会话储存
import storageSession from 'redux-persist/lib/storage/session';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';
const persistConfig = {
    key: 'root',
    storage: storageSession,//缓存机制
    stateReconciler: autoMergeLevel2 // 查看 'Merge Process' 部分的具体情况
};
const myPersistReducer = persistReducer(persistConfig, AllReducers)

const store = createStore(myPersistReducer)

export const persistor = persistStore(store)

export default store;

reducers/index.ts

//index.js
//combineReducers方法,用于 Reducer 的拆分,便于以后添加其他函数
import { combineReducers } from "redux";
import UserData from "./UserData";
import IsLogin from "./islogin";
import Tabs from "./tabs";
const AllReducers: any = combineReducers({
	UserData,
	IsLogin,
	Tabs
})
export  {
	AllReducers
};

其中之一的islogin.ts

const Root = JSON.parse(sessionStorage.getItem("persist:root") || "{}");
const defaultState = Root.UserIsLoginData || false;
export default (state = defaultState, action: any) => {
	if (action.type === "modify_islogin") {
		// 深拷贝,reducer不允许直接修改state
		let newState = JSON.parse(JSON.stringify(state));
		newState = action.value;
		return newState;
	}
	return state;
}

main.ts

import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
//引入相关文件,并对根组件进行包裹,传入store
//这样一来,App的所有子组件就默认都可以拿到state了
import { Provider } from 'react-redux';
import store from "@/redux/store";

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>
  ,
  document.getElementById('root')
)

App.jsx

import React, { Component } from 'react'
import { connect } from "react-redux";

import Login from './pages/login/index'
import Container from './pages/container/index'

class App extends Component {
    render() {
        const { UserData, IsLogin } = this.props;
        // console.log(this.props) 
        return (IsLogin ? <Container UserData={UserData} IsLogin={IsLogin}></Container> : <Login store={this.props}></Login>);
    }
}
const mapStateToProps = (state) => {
    return {
        UserData: state.UserData,
        Tabs: state.Tabs,
        IsLogin: state.IsLogin
    }
}
const mapDispatchToProps = (dispatch) => {
    return {
        onModify: (type) => dispatch(type),
        onRemove: () => dispatch({ type: 'remove' })
    }
}
export default connect(mapStateToProps, mapDispatchToProps)(App);

ps: 才开始写react没多久,有什么不足希望大家多多指出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高梅飞花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值