当前位置:首页 > 科技  > 软件

UseState是干啥的?有哪些坑?

来源: 责编: 时间:2024-06-14 17:37:13 237观看
导读前面的笔记里面说过在React16.8之前,函数式组件里你没办法初始化并使用状态(state),在React16.8之后,useState就很好的解决了这个问题,它可以让你在函数式组件里面使用state。简单地说,你就把它当做函数组件里的setState来用

前面的笔记里面说过在React16.8之前,函数式组件里你没办法初始化并使用状态(state),在React16.8之后,useState就很好的解决了这个问题,它可以让你在函数式组件里面使用state。K4028资讯网——每日最新资讯28at.com

简单地说,你就把它当做函数组件里的setState来用就行了 基本用法:K4028资讯网——每日最新资讯28at.com

用法很简单,代码如下:K4028资讯网——每日最新资讯28at.com

图片图片K4028资讯网——每日最新资讯28at.com

如上所示,你只需要useState传入一个初始值,然后它返回一个数组,数组第一个变量是state,数组第二个变量就是类似setState的方法 我自己整理了一些使用useState需要注意的地方,可能你也需要。K4028资讯网——每日最新资讯28at.com

注意点

初始值传入方法

这个问题是有次在我的技术群里粉丝问到的,大概就是在公司的历史代码里看到useState初始化的时候传入了一个function,感觉到这种用法很少见,后来我查阅了文档,发现这个确实很有意思。K4028资讯网——每日最新资讯28at.com

先看看这个官方例子:K4028资讯网——每日最新资讯28at.com

图片图片K4028资讯网——每日最新资讯28at.com

上面这个例子中,state的初始化我们是使用createInitialTodos这个方法来完成的。K4028资讯网——每日最新资讯28at.com

看下控制台,你会发现有个问题,每次todolist组件重新渲染的时候,createInitialTodos方法都会重新运行一次,但是,只有第一次的返回结果被useState使用,如果createInitialTodos在做非常耗时的计算的话,这就很消耗性能了。K4028资讯网——每日最新资讯28at.com

所以,这里需要注意的是如果使用方法来初始化state,直接把它自身传进去就行了,不用运行它,也就是下面这样写代码:K4028资讯网——每日最新资讯28at.com

图片K4028资讯网——每日最新资讯28at.com

基于最新的state来改变state

这个问题在类组件的setState中也比较常见,直接看代码:K4028资讯网——每日最新资讯28at.com

图片K4028资讯网——每日最新资讯28at.com

上面这个例子,你以为调用了setAge三次,它就会从0加到3,那就大错特错了。K4028资讯网——每日最新资讯28at.com

事实上,state这个东西你可以把它理解为一个快照(snapshot),你更新了它,但是它只会在下次render的时候才改变,也就是说你这样连着调用三次setAge(age+1),每次取得都是当前render中的快照,相当于每次都是setAge(42+1),所以,最终结果是43,并不是45。K4028资讯网——每日最新资讯28at.com

那么如果我就想基于最新的state来改变state,代码可以这样写:K4028资讯网——每日最新资讯28at.com

图片K4028资讯网——每日最新资讯28at.com

也就是给setAge传入方法,这个方法接受上一个状态,返回新的状态。K4028资讯网——每日最新资讯28at.com

连续传入三次方法,这三个方法就会进入队列中并且依次执行,执行完毕之后得到45,最后就拿着45去更新age。K4028资讯网——每日最新资讯28at.com

这个在官方文档里面也叫做批量更新state,都是使用给状态更新方法传入回调来实现的。K4028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-93857-0.htmlUseState是干啥的?有哪些坑?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 高可用解决方案详解(八大主流架构方案)

下一篇: ES14 中最具变革性的五个 JavaScript 特性

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
Top