web前端全系列 教程
1839个小节阅读:2244.2k
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在Thunk函数中我们可以编写异步逻辑的代码(例如 setTimeout
、Promise
和 async/await
),并且可以通过参数获取到dispatch,getState()。从而在异步操作执行后再diapacth action
提示:
Thunk 通常写在 “slice” 文件中
xxxxxxxxxx
import { createSlice } from "@reduxjs/toolkit"
const initialState = {
count:0
}
const counterSlice = createSlice({
name:"counter",
initialState,
reducers:{
increment:(state,{ payload }) =>{
state.count += payload.num
},
decrement:(state,{ payload }) =>{
state.count -= payload.num
}
}
})
export const asyncIncrement = payload => (dispatch,getState) =>{
setTimeout(() =>{
dispatch(increment(payload))
},2000)
}
export default counterSlice.reducer
export const { increment,decrement } = counterSlice.actions
xxxxxxxxxx
import { useSelector,useDispatch } from "react-redux"
import { increment,decrement,asyncIncrement } from "./store/counterSlice"
import { addUser,delUser } from "./store/userSlice"
function App() {
const counter = useSelector(state => state.count)
const users = useSelector(state => state.user)
const dispatch = useDispatch()
const addHandler = () => {
// dispatch(increment({ num:10 }))
dispatch(asyncIncrement({ num:10 }))
}
const minHandler = () => {
dispatch(decrement({ num:5 }))
}
const addUserHandler = () =>{
dispatch(addUser({
user:{
name:"百战"
}
}))
}
const delUserHandler = () =>{
dispatch(delUser({
name:"百战"
}))
}
return (
<div className="App">
<h3>Redux Slice</h3>
<button onClick={addHandler}>增加</button>
<button onClick={minHandler}>减少</button>
<button onClick={ addUserHandler }>添加用户</button>
<button onClick={ delUserHandler }>删除用户</button>
<p>Count = {counter.count}</p>
<ul>
{
users.user.map((element,index) =>{
return <li key={index}>{ element.name }</li>
})
}
</ul>
</div>
);
}
export default App;