web前端全系列 教程
1839个小节阅读:2243.4k
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
slice是应用中单个功能的 Redux reducer 逻辑和 action 的集合, 通过slice我们可以把某个功能的对应state,action,reducer一起定义在一个文件中
src/store/index.js
xxxxxxxxxx
import { configureStore } from "@reduxjs/toolkit"
import counterSlice from "./counterSlice"
import userSlice from "./userSlice"
const store = configureStore({
reducer:{
counter:counterSlice,
user:userSlice
}
})
export default store
src/store/counterSlice.js
xxxxxxxxxx
import { createSlice } from "@reduxjs/toolkit"
const initialState = {
count:0
}
const counterSlice = createSlice({
name:"counter",
initialState,
reducers:{
increment: (state,{ payload }) =>{
// Redux Toolkit 允许我们在 reducers 写 "可变" 逻辑。
// 并不是真正的改变 state 因为它使用了 immer 库
// 当 immer 检测到 "draft state" 改变时,会基于这些改变去创建一个新的
// 不可变的 state
state.count += payload.num
//不需要return 更新后的state了
},
decrement: (state,{ payload }) =>{
state.count -= payload.num
}
}
})
//导出action creator
export const { increment,decrement } = counterSlice.actions
//导出reducer
export default counterSlice.reducer
src/store/userSlice.js
xxxxxxxxxx
import { createSlice } from "@reduxjs/toolkit"
import findIndex from "lodash/findIndex"
const initialState = {
user:[]
}
const userSlice = createSlice({
name:"user",
initialState,
reducers:{
addUser:(state,{ payload }) =>{
state.user.push(payload.user)
},
minUser:(state,{ payload }) =>{
let currentIndex = findIndex(state.user,element=>element.name === payload.name)
state.user = [
state.user.slice(0,currentIndex),
state.user.slice(currentIndex+1)
]
}
}
})
export const { addUser,minUser } = userSlice.actions
export default userSlice.reducer
src/App.js
xxxxxxxxxx
import { useSelector, useDispatch } from "react-redux"
import { increment, decrement } from "./store/counterSlice"
import { addUser,minUser } from "./store/userSlice"
function App() {
const counter = useSelector((state) => state.counter)
const users = useSelector((state) => state.user)
const dispatch = useDispatch()
const clickAddHandler = () => {
dispatch(increment({ num:10 }))
}
const clickMinHandler = () => {
dispatch(decrement({ num:5 }))
}
const clickAddUserHandler = () =>{
dispatch(addUser({ user:{ name:"百战" } }))
}
const clickMinUserHandler = () =>{
dispatch(minUser({ name:"百战" }))
}
return (
<div className="App">
<h3>Redux Slice</h3>
<p>Count = {counter.count}</p>
<button onClick={clickAddHandler}>增加</button>
<button onClick={clickMinHandler}>减少</button>
<button onClick={clickAddUserHandler}>添加用户</button>
<button onClick={clickMinUserHandler}>减少用户</button>
<ul>
{
users.user.map((element,index) =>{
return <li key={ index }>{ element.name }</li>
})
}
</ul>
</div>
);
}
export default App;
action creator自动生成
createSlice
函数会自动生成与我们编写的 reducer 函数同名的 action creator,保存在slice的actions属性里面