redux初始化

redux 初识化的步骤几乎相同!!几乎都是复制重用

1.安装 redux 相关的包:

redux : 集中式储存状态,主要包
react-redux: 是Redux提出的React绑定库
redux-thunk: 中间件-可以再里面进行函数操作

  • 注意redux-thunk我这里下载的是2.3.0的版本,最新版有BUG
  • 使用TS的时候在redux-thunk@2.4.0新版中,使用dispatch的时候,会丢失提示

redux-devtools-extensio:调试工具,需要搭配Redux DevTools组件

npm i redux react-redux redux-thunk@2.3.0 redux-devtools-extension

2.目录

- store
---- index.ts
---- actions
------------ 模块1.ts  # 给 dispatch提供action
------------ 模块2.ts
---- reducers
------------ index.ts  # 会引入并合并 模块1, 模块2
------------ 模块1.ts

3. 初识化

store/index.ts

import { createStore, applyMiddleware } from 'redux'
import thunk from 'redux-thunk'
import { composeWithDevTools } from 'redux-devtools-extension'
import rootReducer from './reducers'

const middlewares = composeWithDevTools(applyMiddleware(thunk))
const store = createStore(rootReducer, middlewares)

export default store

store/reducers/index.ts 中:

import { combineReducers } from 'redux'

import login from './login'

const rootReducer = combineReducers({
  login
})

export default rootReducer

store/reducers/login.ts 中:

const initialState = {}

const login = (state = initialState, action: any) => {
  return state
}

export default login

src/index.tsx 中:

import ReactDOM from 'react-dom'
import './index.scss'
import App from './App'
import { Provider } from 'react-redux'
import store from './store'

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

4.检查效果

在这里插入图片描述

拓展 - 配置Redux的相关类型

src/types/store.d.ts

import { ThunkAction } from 'redux-thunk'
import store from '../store'

// Redux 应用的状态
export type RootState = ReturnType<typeof store.getState>

// -------------------- Redux 对象形式的 action 的类型 ---------------------------

// 登录相关的 action 类型
export type LoginAction = {}
// 文章相关的 action 类型
export type ArticleAction = {}
// 等等
type RootAction = LoginAction | ArticleAction

// 使用 thunk 中间件后的 Redux dispatch 类型
// ReturnType:thunk action 的返回类型,项目中几乎都是返回 Promise
// State: Redux 的状态  RootState
// ExtraThunkArg: 额外的参数,没有用到,可以指定为 unknown
// BasicAction: 非 thunk action,即对象形式的 action
export type RootThunkAction = ThunkAction<
  void,
  RootState,
  unknown,
  RootAction
>

实例操作:

一个登录发送请求需要做的操作
在这里插入图片描述

React Redux中实现数据持久化有多种方法,下面是其中一种常用的方法: 1. 使用redux-persist库:redux-persist是一个用于实现Redux数据持久化的第三方库。它通过将Redux store中的数据保存到本地存储(如localStorage或sessionStorage)中,以便在刷新页面或重新加载应用程序时保持数据的持久性。 首先,安装redux-persist库: ``` npm install redux-persist ``` 然后,在Redux的配置文件中,进行redux-persist的配置和初始化: ```javascript import { createStore } from 'redux'; import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; // 默认使用localStorage // 导入你的reducer import rootReducer from './reducers'; // 配置redux-persist const persistConfig = { key: 'root', // 存储的key,默认为root storage, // 使用的存储引擎,默认为localStorage }; const persistedReducer = persistReducer(persistConfig, rootReducer); // 创建store const store = createStore(persistedReducer); const persistor = persistStore(store); export { store, persistor }; ``` 最后,在应用程序的入口文件中,使用`PersistGate`组件包裹整个应用程序,并将`persistor`作为其属性: ```javascript import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import { PersistGate } from 'redux-persist/integration/react'; import { store, persistor } from './store'; ReactDOM.render( <Provider store={store}> <PersistGate loading={null} persistor={persistor}> // 应用程序的根组件 </PersistGate> </Provider>, document.getElementById('root') ); ``` 使用以上配置,Redux的状态将会被自动保存到本地存储中,并在应用程序重新加载时被恢复。你可以根据需要自行调整配置,例如设置存储引擎、存储的key等。详细的配置和更多高级用法,请参考redux-persist库的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值