记录学习react-redux和Redux Toolkit

701 阅读3分钟

redux的基本使用

首先在使用redux前先安装redux,首先安装redux(npm install redux),在安装依赖(npm install react-redux)主要使用里面的connect高阶函数、provider。

创建一个store文件夹,添加名字为index.xxx

从redux里面导入createStore函数,创建一个store对象。

code.png

在入口文件main中,从react-redux中引入Provider,在从store里面引入store,给Provide添加store属性,把store赋值上去,这样就可以全局获取redux中的数据。

code.png

编写reducer(reducer.jsx)

可以看到store里面依赖了reducer文件,在reducer定义一个默认state,创建一个reducer函数,该函数接收两个参数,第一个是state默认值,第二个action是行为由我们传递过来的action决定。注意state必须始终保持数据的不可变性。

code.png

编写actionCreator(actionCreators.jsx)

这个文件中的函数相当于我们告诉reducer对他进行什么操作。

code.png

编写constants常量文件(constants.jsx)

编写常量主要原因是防止出错,单词打错。

code.png

直接和redux建立联系

在class组件中,直接与redux联系需要手动订阅和取消redux。

code.png

使用connect高阶组件建立联系(class组件)

connect接收两个参数分别为:mapStateToProps,mapDispatchToProps,第一个参数是和redux里面的state做映射,第二个则是为我们的action行为做映射,connection又返回一个函数,后面的参数为引用connection的组件的目标组件。

code.png

在函数组件中使用redux(类组件)

从react-redux中导出useSelector用来获取state的值,useDispatch用来提交行为。

code.png

重头戏!!(redux Toolkit)

redux tookit的安装

首先执行npm install @reduxjs/toolkit,然后导入configureStore,该函数中主要有reducer,用于接受多个reducer,然后该函数也返回store,和redux一样在入口文件执行同样的操作。

code.png

App.js的部分代码

code.png

createSlice

从上图中我们可以看到依赖counterReducer,这跟vuex的分包很像,每一个reducer都相当于vuex中的store。编写counterReducer首先导入createSlice函数,该函数接收一个对象,主要的参数有name,state,reducers。name和vuex的name一样,state也是相当于vuex的state的函数,reducers相当于vuex中的ations用于修改state的值,最好用的一点也是可以直接从reducers导出这些行为函数!!

code.png

createAsyncThunk

createAsyncThunk是用于处理异步请求的,和redux中的thunk很像。

code.png

首先我们需要使用createAsyncThunk创建一个触发函数,该函数用于执行发送网络请求,第一个参数是个标识,可以随便取,该函数被调用的时候第二个回调函数会自动调用,在这回调函数中请求数据再将请求过来的数据返回出去。

userInfoSlice的extraReducers会捕获网络请求的三种状态,当然我们一般情况下只需要关心网络请求成功的状态,通过extraReducers(builder){ builder.addCase(这里填createAsyncThunk创建出来的函数.(想要监听的状态),(state//这是我们的初始化的值,{payload}//这是我们网络请求成功后返回的值 ))}。

最后我们在组件触发该函数。

code.png

页面的内容

code.png