当前位置: 首页 > news >正文

React-函数组件的特性与闭包

文章目录

  • 一、理解函数组件的特性与闭包的关系
    • 1.函数组件的特性:
    • 2.说明:

一、理解函数组件的特性与闭包的关系

从一个简单的示例,来看函数组件的特性与闭包:

const App = () => {
  const [count, setCount] = useState(0)
  
  const handleClick = () => {
    setCount(count + 1)
  }

  return (
    <div>
      <button onClick={handleClick}>+1</button>
      <h1>计数器:{count}</h1>
    </div>
  )
}

1.函数组件的特性:

对于 React 的函数组件来说,只要修改状态,组件就会更新。同时,函数中的代码都会从头到尾重新执行一遍。

也就是说每一次的组件更新,都是一次全新的函数调用,在这一次的调用中都会创建新的:

  1. 变量,比如:存储状态的变量 count、普通变量
  2. 函数,比如:事件处理程序 handleClick、onSetData、onGetData

2.说明:

当一个函数内部访问了外部的变量时,由于 JS 函数闭包机制的存在,这个函数内部只能访问到本次组件更新时创建的变量值。比如:

2.1 组件第一次执行(第一次创建的闭包):

变量 count 的值为:0
函数 handleClick 访问到的外部变量 count 的值就是:0

2.2 点击 +1 按钮,组件重新渲染,组件第二次执行(第二次创建的闭包):

变量 count 的值为:1
函数 handleClick 访问到的外部变量 count 的值就是:1

2.3 怎么理解这个过程呢?

可以把组件的每次更新想象成给组件拍照,组件每次更新都会对应到一张照片,而每一张特定的照片都记录了那一刻组件特定的状态。

比如:

第一张照片(组件第一次执行)中 count 的值为:0
第二张照片(组件更新会后,第二次执行)中 count 的值为:1

从原理层面来看,每一张照片中记录的数据,是每次创建的闭包来保存的

相关文章:

  • MySQL的EXPLAIN执行计划深入分析
  • 【MySQL基础篇】MySQL数据库安装教程
  • 记某同事的两次误操作导致Linux瘫痪
  • 初识OpenGL (-)纹理过滤(Texture Filtering)
  • ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(3)
  • wsl安装gpu版mindspore(二)
  • 输出总结是成长的开始
  • [RK3568 Android11] Binder通信整体框架
  • 【uiautomation】获取微信好友名单,可指定标签 全部
  • VAPS XT开发入门教程07:表元素(TableElements)介绍
  • 一文带你了解电感的5大损耗
  • C语言for循环必备练习题
  • Optimization of DQN
  • 猿创征文|微软出品效率神器PowerToys,太实用了
  • Arduino框架下ESP32/8266使用PROGMEM功能将数据存储到flash中的使用规范
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Facebook AccountKit 接入的坑点
  • JS数组方法汇总
  • Redis 中的布隆过滤器
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 仿天猫超市收藏抛物线动画工具库
  • 分类模型——Logistics Regression
  • 工作手记之html2canvas使用概述
  • 机器学习中为什么要做归一化normalization
  • 利用jquery编写加法运算验证码
  • 聊聊flink的BlobWriter
  • 前端_面试
  • 前端代码风格自动化系列(二)之Commitlint
  • 试着探索高并发下的系统架构面貌
  • 移动端 h5开发相关内容总结(三)
  • 在Unity中实现一个简单的消息管理器
  • 自定义函数
  • raise 与 raise ... from 的区别
  • 移动端高清、多屏适配方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #Linux(权限管理)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (C++)八皇后问题
  • (安卓)跳转应用市场APP详情页的方式
  • (分类)KNN算法- 参数调优
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十八)三元表达式和列表解析
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)iOS字体
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 连接数据库,通过数据库生成Modell
  • @SuppressWarnings(unchecked)代码的作用
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [20170728]oracle保留字.txt
  • [android]-如何在向服务器发送request时附加已保存的cookie数据