位置: IT常识 - 正文

React--》useReducer的讲解与使用(react reducer详解)

编辑:rootadmin
React--》useReducer的讲解与使用

目录

useReducer的使用

刨析useReducer参数

useReducer的使用


useReducer的使用

推荐整理分享React--》useReducer的讲解与使用(react reducer详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react-resume-site,react reduce,react sentry,react se,react-rewired,react reducers,react se,react reducer,内容如对您有帮助,希望把文章链接给更多的朋友!

在React函数式组件中,我们可以通过useState()来创建state,这种state创建方式会给我们返回两个东西state和setState()。state用来读取数据,而setState()用来设置修改数据,但这种方法也存在着一些不足,因为所有的修改state方式都必须通过setState()来进行,如果遇到一些复杂度比较高的state时,这种方式就变得有些繁琐了。

为了解决复杂state带来的不便,React为我们提供了一个新的使用state方式,当你的state过于复杂时,你就可以使用对state整合的工具 “Reducer” ,其作用就是将那些和同一个state相关的所有函数都整合到一起,方便在组件中进行调用。

注意:Reducer只适合那些比较复杂的state,对于简单的state使用Reducer只能是徒增烦恼,以下都会用简单的例子来说明Reducer的使用。

刨析useReducer参数

useReducer实际上算是useState的升级版,虽然使用比useState复杂,但其能够应付更加繁琐的应用场景,其接收的参数有三个,接下来将详细刨析useReducer这个Hooks的使用,Reducer和State相同也是一个钩子函数,其语法格式如下:

const [state, dispatch] = useReducer(reducer, initialArg, init?)

数组中第一个参数:用来获取state的值;数组中第二个参数:state修改的派发器,通过派发器可以发送操作state的命令,具体的修改行为将会由另外一个函数执行。

reducer参数:用于指定如何更新状态。它必须函数,应该将状态数据和操作方法作为参数,并且应该返回下一个状态。状态和动作可以是任何类型。即:(state,action) => newState

state:是当前最新的状态值

action:用于告诉reducer当前执行的操作,reducer会根据不同的操作执行不同的逻辑

React--》useReducer的讲解与使用(react reducer详解)

newState:返回值,返回一个新的state

initialArg参数:用于计算初始状态的值,即为state的初始值,作用和useState()中的值是一样的,它可以是任何类型的值。如何从中计算初始状态取决于下一个init参数。

init参数:可选参数,本质上是一个函数,参数是初始的state,如果传入这个参数的话,那么初始state就是init(initState)的返回结果。通俗来讲就是:应该返回初始状态的初始值设定项函数。如果未指定,则初始状态设置为initialArg。否则,初始状态被设置为调用init(initialArg)的结果。

useReducer的使用

在 官方文档案例 中,已经很明确的告诉我们如何使用useReducer,如下:

官方文通过将reducer函数抽离出来去管理状态的变化,根据传入action的不同返回新的状态,我们在点击按钮时会调用dispatch函数,并传入一个包含type属性的对象即action,这个对象表示将要进行的状态更新操作。

接下来举一个简单的计数器的案例,来比较一下使用Reducer和未使用的区别在哪里。

传统操作State的方法为:

import React,{ useState } from 'react'const App = () => { const [num,setNum] = useState(0) const addHandler = () =>{ setNum(prenum => prenum + 1) } const subHandler = () =>{ setNum(prenum => prenum -1) } return ( <div style={{fontSize:'30px',padding:'50px'}}> <button onClick={addHandler}>加1</button> {num} <button onClick={subHandler}>减1</button> </div> )}export default App

使用Reducer操作state方法为:

import React,{ useReducer } from 'react'const App = () => { // reducer函数 state:当前最新状态值、action:当前执行的操作 const reducer = (state,action) =>{ switch(action.type){ case 'ADD': return state + 1 case 'SUB': return state - 1 default: return state } } const [num,numDispatch] = useReducer(reducer,0) const addHandler = () =>{ numDispatch({type:'ADD'}) } const subHandler = () =>{ numDispatch({type:'SUB'}) } return ( <div style={{fontSize:'30px',padding:'50px'}}> <button onClick={addHandler}>加1</button> {num} <button onClick={subHandler}>减1</button> </div> )}export default App

当然如果是非常简单的state,使用useState是明智的选择,但在某些场景下,例如 state 逻辑较复杂且包含多个子值,或者下一个 state 依赖于之前的 state 等。useReducer会更加适用,使用 useReducer 还能给那些会触发深更新的组件做性能优化,因为你可以向子组件传递 dispatch 而不是回调函数 。如下:

import { useReducer } from 'react';function reducer(state, action) { switch (action.type) { case 'incremented_age': { return { name: state.name, age: state.age + 1 }; } case 'changed_name': { return { name: action.nextName, age: state.age }; } default: return null }}const initialState = { name: 'Taylor', age: 42 };export default function App() { const [state, dispatch] = useReducer(reducer, initialState); function handleButtonClick() { dispatch({ type: 'incremented_age' }); } function handleInputChange(e) { dispatch({ type: 'changed_name', nextName: e.target.value }); } return ( <> <input value={state.name} onChange={handleInputChange} /> <button onClick={handleButtonClick}> +1 </button> <p>Hello, {state.name}. You are {state.age} years old</p> </> );}

无论是useState还是useReducer,都是为了帮助我们的管理组件的状态 ,但如果你的项目比较复杂,后期要经常加以维护的话,选择useReducer或许是一个不错的选择。

本文链接地址:https://www.jiuchutong.com/zhishi/295380.html 转载请保留说明!

上一篇:Css之使用calc()计算宽高(vw/vh)(css calculate)

下一篇:Segment Anything Model (SAM)——分割一切,具有预测提示输入的图像分割实践(segment anything model github)

  • 微信用户名是指什么呢(微信用户名是啥意思)

    微信用户名是指什么呢(微信用户名是啥意思)

  • 华为手机微信分身怎么弄(华为手机微信分身怎么删除)

    华为手机微信分身怎么弄(华为手机微信分身怎么删除)

  • 访客网络有必要开吗(访客网络有什么作用)

    访客网络有必要开吗(访客网络有什么作用)

  • 华为锁定设备有什么用(华为锁定设备有什么影响)

    华为锁定设备有什么用(华为锁定设备有什么影响)

  • 抖音怎么隐身进直播间(抖音怎么隐身进去直播间还能聊天)

    抖音怎么隐身进直播间(抖音怎么隐身进去直播间还能聊天)

  • 华为手机出国还能用吗(华为手机出国还能用谷歌吗)

    华为手机出国还能用吗(华为手机出国还能用谷歌吗)

  • 鲁大师温度检测准确吗(鲁大师温度检测怎么在游戏中显示)

    鲁大师温度检测准确吗(鲁大师温度检测怎么在游戏中显示)

  • 微信注册发送短信验证失败怎么回事(微信注册发送短信)

    微信注册发送短信验证失败怎么回事(微信注册发送短信)

  • 一个身份证号可以开通几个快手直播(一个身份证号可以绑定几个微信号)

    一个身份证号可以开通几个快手直播(一个身份证号可以绑定几个微信号)

  • 软件由哪三部分组成(软件包括哪几个部分)

    软件由哪三部分组成(软件包括哪几个部分)

  • 苹果11可以用5g网络吗(苹果11可以用5g卡吗)

    苹果11可以用5g网络吗(苹果11可以用5g卡吗)

  • xr支持无线充电吗(xr支持无线充电多少w)

    xr支持无线充电吗(xr支持无线充电多少w)

  • 手机漏液还能用多久(手机漏液还能用吗,有什么危害)

    手机漏液还能用多久(手机漏液还能用吗,有什么危害)

  • ipad平板截屏怎么截(ipad平板电脑截图怎么截)

    ipad平板截屏怎么截(ipad平板电脑截图怎么截)

  • 快手提现比例是对半吗(快手提现什么比例)

    快手提现比例是对半吗(快手提现什么比例)

  • 微信突然白屏怎么处理(微信突然白屏了)

    微信突然白屏怎么处理(微信突然白屏了)

  • 解散微信群有啥显示(解散微信群信息是否还在?)

    解散微信群有啥显示(解散微信群信息是否还在?)

  • 苹果8可以开空调吗(苹果8可以开空调遥控吗)

    苹果8可以开空调吗(苹果8可以开空调遥控吗)

  • 华为荣耀10锁屏时间怎么设置(华为荣耀10锁屏密码怎么改)

    华为荣耀10锁屏时间怎么设置(华为荣耀10锁屏密码怎么改)

  • 电脑桌面比例突然变大(电脑桌面比例突然变小)

    电脑桌面比例突然变大(电脑桌面比例突然变小)

  • the Pura Meduwe Karang神庙中雕刻艺术家W.O.J.Nieuwenkamp的作品,印度尼西亚巴厘岛 (© John Elk III/Getty Images)

    the Pura Meduwe Karang神庙中雕刻艺术家W.O.J.Nieuwenkamp的作品,印度尼西亚巴厘岛 (© John Elk III/Getty Images)

  • css添加边框阴影(css添加边框阴影 立体效果)

    css添加边框阴影(css添加边框阴影 立体效果)

  • 应补退税额较少是什么意思
  • 广东省增值税发票勾选平台
  • 车辆保险的车船税怎么算
  • 人民大学税务专硕学费
  • 一般纳税人销售二手车
  • 纳税人转登记期限
  • 发生销售折让可以不开具
  • 审核发票的要点和方法
  • 自建模具怎么做账
  • 其他综合收益在利润表的哪个位置哪里
  • 资产的计量属性主要包括哪些
  • 应收账款和长期应收款区别
  • 预付款与定金的比例
  • 利息保障倍数计算公式资本化利息
  • 机器保养计入什么
  • 一次性伤残就业赔偿标准
  • 年度所得税汇算清缴报告在哪打印
  • 企业并购金额如何确定
  • 购买原材料已付款怎么记账
  • 自行建造固定资产的计税基础
  • 营改增后购置设备进项税抵扣怎么做?
  • 居民纳税人具体包括哪些?
  • 印花税的计税依据含税吗
  • 超市的商品进销表怎么做
  • 公司发手机奖励合法吗
  • 发票抬头写个人税号怎么写
  • 商业承兑拒付怎么办
  • 个人帮公司买东西怎么报销
  • 从银行提取备用金填制什么凭证
  • php可变参数
  • 包装物如何做会计分录
  • 代扣代缴的增值税算进项税吗
  • 房产税会计科目应该走税金及附加还是管理费用
  • aliapp.exe是什么意思
  • 银行对公账户收款码
  • 吸收合并会计处理举例
  • 多台电脑共享打印机怎么设置
  • 别人说你坏话怎么发朋友圈说说
  • php模拟get请求
  • 最奢华的女士腕表
  • php curl爬虫
  • 预提费用计提的分录
  • 金蝶利息收入结转怎么弄
  • 勘察设计四个阶段
  • websocket tcpsocket
  • cnn三层
  • 小企业发出存货成本的计量方法有
  • 以房租入股股份怎么计算
  • 销售部门的固定资产
  • 免征企业所得税的有哪些行业
  • 免征文化事业建设费条件的销售额标准
  • 汇算清缴补缴所得税的报税利润表怎么报
  • 期末留抵税额怎么填报表
  • 期末留抵的进项税可以计入成本吗
  • 税控盘全额抵扣怎么填申报表
  • 固定资产清理账户期末有余额吗
  • 无形资产与固定资产一样都会存在实体性贬值
  • 固定资产入账标准最新规定企业
  • 服务性的行业有哪些
  • 发票红冲重新开具怎么做分录
  • 备用金如何管理制度
  • 会计凭证,报告怎么做
  • mysql数据库的使用
  • 单网卡计算机有几个网络接口
  • centos添加子接口
  • win1021年更新
  • win7任务栏变小图标
  • win7系统如何调节屏幕亮度
  • win8怎么开启蓝牙
  • unity如何连接数据库
  • android自定义组件开发详解
  • linux shell脚本命令
  • python中如何去除空格
  • python极简讲义pdf
  • lohd
  • 分享面试流程
  • 2023车船税收费价格表图片
  • 烟台税务局举报电话号码
  • 小型贸易公司怎么赚钱
  • 佛山市国家税务局科长陈科长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设