今天来学习下react中另一个重要的知识:
redux
及其工作流程和案例分析
感兴趣的小伙伴一起来看看吧~
英文文档:https://redux.js.org/
中文文档:https://www.redux.org.cn/
Github:https://github.com/reduxjs/redux
状态管理
的JS库(不是react插件库)。共享
的状态。随时拿到
(共享)。1️⃣ 动作的对象
2️⃣ 包含2个属性
3️⃣ 例子:{type:‘ADD_STUDENT’,data:{name:‘tom’,age:18} }
1️⃣ 用于初始化状态
,加工状态
。
2️⃣ 加工时,根据旧的state和action,产生新的state的纯函数
。
1️⃣ 将state、action、reducer联系在一起的对象
2️⃣ 如何得到此对象?
3️⃣ 此对象的功能?
getState():
得到statedispatch(action):
分发action, 触发reducer调用, 产生新的statesubscribe(listener):
注册监听, 当产生了新的state时, 自动调用作用:创建包含指定reducer的store对象
最核心的管理对象
作用:应用上基于redux的中间件
(插件库)
作用:合并多个reducer函数
求和案例:
有五个按钮,下拉按钮选择加数,点击加号或减号按钮,将当前求和数与下拉选择的数进行运算,得到当前的求和数,“当前求和为奇数”按钮表示当前求和为奇数时进行加法运算,“异步加”按钮表示等待0.5s再进行加法运算
效果:
Count组件 => index.jsx:
import React, { Component } from 'react'
export default class Count extends Component {
state = {
count: 0
}
// 加法
increment = () => {
// 获取用户输入
const { value } = this.selectNumber
// 读取原来的状态值
const { count } = this.state
this.setState({ count: count + value * 1 })
}
// 减法
decrement = () => {
// 获取用户输入
const { value } = this.selectNumber
// 读取原来的状态值
const { count } = this.state
this.setState({ count: count - value * 1 })
}
// 奇数再加
incrementIfOdd = () => {
// 获取用户输入
const { value } = this.selectNumber
// 读取原来的状态值
const { count } = this.state
if (count % 2 !== 0) {
this.setState({ count: count + value * 1 })
}
}
// 异步加
incrementAsync = () => {
// 获取用户输入
const { value } = this.selectNumber
// 读取原来的状态值
const { count } = this.state
setTimeout(() => {
this.setState({ count: count + value * 1 })
}, 500)
}
render() {
return (
<div>
<h1>当前求和为:{this.state.count}</h1>
<select ref={c => this.selectNumber = c}>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button onClick={this.increment}>+</button>
<button onClick={this.decrement}>-</button>
<button onClick={this.incrementIfOdd}>当前求和为奇数再加</button>
<button onClick={this.incrementAsync}>异步加</button>
</div>
)
}
}
接下来的一篇文章,我会运用redux来实现这个案例的效果~
包含了redux精简版,完整版和异步action版的写法~
感兴趣的小伙伴浅浅期待下吧✨
原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!