redux的基本使用
首先在使用redux前先安装redux,首先安装redux(npm install redux),在安装依赖(npm install react-redux)主要使用里面的connect高阶函数、provider。
创建一个store文件夹,添加名字为index.xxx
从redux里面导入createStore函数,创建一个store对象。
在入口文件main中,从react-redux中引入Provider,在从store里面引入store,给Provide添加store属性,把store赋值上去,这样就可以全局获取redux中的数据。
编写reducer(reducer.jsx)
可以看到store里面依赖了reducer文件,在reducer定义一个默认state,创建一个reducer函数,该函数接收两个参数,第一个是state默认值,第二个action是行为由我们传递过来的action决定。注意state必须始终保持数据的不可变性。
编写actionCreator(actionCreators.jsx)
这个文件中的函数相当于我们告诉reducer对他进行什么操作。
编写constants常量文件(constants.jsx)
编写常量主要原因是防止出错,单词打错。
直接和redux建立联系
在class组件中,直接与redux联系需要手动订阅和取消redux。
使用connect高阶组件建立联系(class组件)
connect接收两个参数分别为:mapStateToProps,mapDispatchToProps,第一个参数是和redux里面的state做映射,第二个则是为我们的action行为做映射,connection又返回一个函数,后面的参数为引用connection的组件的目标组件。
在函数组件中使用redux(类组件)
从react-redux中导出useSelector用来获取state的值,useDispatch用来提交行为。
重头戏!!(redux Toolkit)
redux tookit的安装
首先执行npm install @reduxjs/toolkit,然后导入configureStore,该函数中主要有reducer,用于接受多个reducer,然后该函数也返回store,和redux一样在入口文件执行同样的操作。
App.js的部分代码
createSlice
从上图中我们可以看到依赖counterReducer,这跟vuex的分包很像,每一个reducer都相当于vuex中的store。编写counterReducer首先导入createSlice函数,该函数接收一个对象,主要的参数有name,state,reducers。name和vuex的name一样,state也是相当于vuex的state的函数,reducers相当于vuex中的ations用于修改state的值,最好用的一点也是可以直接从reducers导出这些行为函数!!
createAsyncThunk
createAsyncThunk是用于处理异步请求的,和redux中的thunk很像。
首先我们需要使用createAsyncThunk创建一个触发函数,该函数用于执行发送网络请求,第一个参数是个标识,可以随便取,该函数被调用的时候第二个回调函数会自动调用,在这回调函数中请求数据再将请求过来的数据返回出去。
userInfoSlice的extraReducers会捕获网络请求的三种状态,当然我们一般情况下只需要关心网络请求成功的状态,通过extraReducers(builder){ builder.addCase(这里填createAsyncThunk创建出来的函数.(想要监听的状态),(state//这是我们的初始化的值,{payload}//这是我们网络请求成功后返回的值 ))}。
最后我们在组件触发该函数。
页面的内容