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

React 中 useEffect

React 中 useEffect 是副作用函数,副作用函数通常是处理外围系统交互的逻辑。那么 useEffect 是怎处理的呢?React 组件都是纯函数,需要将副作用的逻辑通过副作用函数抽离出去,也就是副作用函数是不影响函数组件的返回值的。例如,我们要获取用户列表,副作用函数去服务器获取数据,数据获取成功之后,更新 State 并发起渲染,他对函数式组件没有影响。根据以上逻辑,对应 React Render/Commit 两阶段,副作用函数函数要在 commit 式在去执行。

我们看一个简单的 useEffect 例子,在 React 中是如何处理的。

function App() {const [name, setName] = useState("123")const input = useRef()useEffect(()=>{console.log(name)}, [name])const handleClick = ()=>{setName(input.current.value)}return (<div className="App"><header className="App-header"><img src={logo} className="App-logo" alt="logo" /><p>Edit <code>src/App.js</code> and save to reload.</p><input ref={input}></input><button onClick={handleClick}>abcd</button><aclassName="App-link"href="https://reactjs.org"target="_blank"rel="noopener noreferrer">Learn React</a></header></div>);
}

跟踪 React 代码,我们可以到 React 在 commit 阶段执行 effect。
在这里插入图片描述
进入 scheduleCallback 并创建调度任务
在这里插入图片描述
在这里插入图片描述
commit 结束后,workloop 执行 effect。
在这里插入图片描述

总结

useEffect 将函数式组件副作用于组件逻辑进行分离,commit 阶段结束后进行执行。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JAVA每日作业day7.4
  • 软件是什么?一个软件到底是哪些部分组成的-软件到底有哪些分支呢?
  • Synchronized、volatile与ReentrantLock:Java并发编程中的同步机制比较
  • docker部署mycat,连接上面一篇的一主二从mysql
  • Windows ipconfig命令详解,Windows查看IP地址信息
  • Go 语言入门(一)
  • 策略模式的应用
  • 代码随想录——划分字母区间(Leetcode763)
  • 万界星空科技MES系统中的排版排产功能
  • 刷代码随想录有感(127):动态规划——判断是否为子序列
  • python ui 工作流完善功能
  • HTTP 常见状态码
  • STM32F1+HAL库+FreeTOTS学习2——STM32移植FreeRTOS
  • 详解前缀码与前缀编码
  • Redis---10---SpringBoot集成Redis
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【347天】每日项目总结系列085(2018.01.18)
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Node + FFmpeg 实现Canvas动画导出视频
  • node和express搭建代理服务器(源码)
  • Python - 闭包Closure
  • Python 反序列化安全问题(二)
  • React 快速上手 - 07 前端路由 react-router
  • Redux系列x:源码分析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 关于extract.autodesk.io的一些说明
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 详解移动APP与web APP的区别
  • Android开发者必备:推荐一款助力开发的开源APP
  • 阿里云服务器购买完整流程
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​Spring Boot 分片上传文件
  • ​VRRP 虚拟路由冗余协议(华为)
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # 计算机视觉入门
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)fgets与fputs函数详解
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (回溯) LeetCode 77. 组合
  • (新)网络工程师考点串讲与真题详解
  • (译)2019年前端性能优化清单 — 下篇
  • (转)jdk与jre的区别
  • (转)关于多人操作数据的处理策略
  • ***监测系统的构建(chkrootkit )
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .a文件和.so文件
  • .form文件_SSM框架文件上传篇
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET建议使用的大小写命名原则