react_redux只介绍了原理图,为理解redux_toolkit做铺垫。
本笔记是对一下课程做的输出,若大家有不理解的地方,可看完课程后,再借助课程理解笔记内容,同时也鼓励大家对自己的听课的内容进行输出,帮助自己二次回顾。
097_尚硅谷_react教程_redux简介_哔哩哔哩_bilibili
React98_引入RTK_哔哩哔哩_bilibili
React99_使用RTK创建store_哔哩哔哩_bilibili
React100_完成RTK代码_哔哩哔哩_bilibili
React101拆分RTK代码_哔哩哔哩_bilibili
1.React Components:React组件(带s是因为组件不止一个)
数据在React Components内可通过const {state,setState}=useState()获取到,但只限于组件内部,若想让数据在组件中流动需借助redux;
2.Action Creators:是一个对象,包含两个属性,type(动作),date(数据);
3.dispatch(action):是一个函数,作用是把action动作对象交给能操作动作状态的人;
4.Store:是react_redux的核心,整个项目中只可以有一个store,dispatch将action传递给store,store将5.previousState(初始值)和action一起给Reducers进行加工;
6.Reducers:接收store传递过来的previousState和action后加工返回新的值(return newState)给Store;
7.React Components:通过getState()获取到‘加工后’的值后进行视图更新。
初始化时的处理
createSlice(切片-创建整体中的一部分):创建reducerd切片
STK,几乎所有的方法都要对象传递参数
切片name最后不要重复
文件目录结构
-store
---index.js(总)
---schoolSlice.js(切片)
---stySlice.js(切片)
-App.js
schoolSlice.js
import { createSlice } from '@reduxjs/toolkit'
const schoolSlice=createSlice(option:{
name:'school', //用来自动创建action中的type
initialState:{
address:"黑河"
},
reducer:{
setAddress(state,action){
state.address='黑龙江——黑河'
}
})
//暴露切片,并将schoolSlice中的reducer重命名为schoolReducer
export const {reducer:schoolReducer}=schoolSlice
stuSlice.js
import { createSlice } from '@reduxjs/toolkit'
const stuSlice=createSlice(option:{
name:'stu', //用来自动创建action中的type
initialState:{
name:"小才"
age:23
},
reducer:{//(1)
setName(state,action){
state.name='xiaocai'
// 两个参数:state->代理对象,可以直接修改
// 对不同方法指定对state的不同操作
}
setAge(state,action){
state.age="18"
}
})
// 导出姓名,年龄方法
export const { setName, setAge } = counterSlice.actions (2)
//暴露切片,并将stySlice中的reducer重命名为stuReducer
export const {reducer:stuReducer}=stySlice (1)
//createSlice是一个全自动的创建reducer切片的方法,
// 在它的内部调用就是createAction(1)和createReducer(2)
createSlice(configuration object)
配置对象中的属性:
总的来说,使用createSlice创建切片后,切片会自动根据配置对象生成action和reducer,action需要导出给调用处,调用处可以使用action作为dispatch的参数触发state的修改。reducer需要传递给configureStore以使其在仓库中生效。
我们可以看看counterSlice和counterSlice.actions是什么样子
index.js
improt {configureStore} from "@reduxjs/toolkit"
import {stuReducer} from "./stuSlice.js"
import {schoolSlice} from "./schoolSlice.js"
//创建store,需要配置一个对象作为参数
const store=configureStore(options:{
reducer:{
student:stuReducer,
school:schoolReducer
}
})
export default store
main.js
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
// redux toolkit
import { Provider } from 'react-redux'
import store from './store'
//Provider:注入store
//redux只有一个store
ReactDOM.createRoot(document.getElementById('root')).render(
,
)
App.jsx
// 导入react和react-dom
import React from 'react'
import {useDispatch,useSelector} from 'react-redux'
import {setName, setAge} from './store/stuSlice';
import {setAddress as setSchoolAddress} from "./store/schoolSlice";
const App=()=>{
//useSelector()用来加载state中的数据
//第一种写法:分别取(对不同方法指定对state的不同操作)
//const student=useSelector(state=>state.student)
//const school=useSelector(state=>state.school)
//第二中写法:一起取
const {student,school}=useSelector(selector:state=>state)
//通过useDispatch()来获取派发器对象
const dispatch=useDispatch();
const setNameHandler = () => {
dispatch(setName('小李'));
};
const setAgeHandler = () => {
dispatch(setAge(33));
};
return (
{student.name} ---
{student.age} ---
{school.address}
)
}
这是关于如何通过 React 设置和使用 Redux Toolkit 的简要概述。 回顾细节:
参考链接
Learning-Notes/18 【Redux Toolkit】.md at master · dselegent/Learning-Notes · GitHub