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

UseState是干啥的?有哪些坑?

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

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

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

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

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

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

注意点

初始值传入方法

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

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

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

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

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

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

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

基于最新的state来改变state

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 中关村论坛11月25日开幕,15位诺奖级大咖将发表演讲

    11月18日,记者从2022中关村论坛新闻发布会上获悉,中关村论坛将于11月25至30日在京举行。本届中关村论坛由科学技术部、国家发展改革委、工业和信息化部、国务
Top