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

UseState是干啥的?有哪些坑?

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

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

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

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

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

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

注意点

初始值传入方法

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

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

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

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

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

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

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

基于最新的state来改变state

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top