最新要闻
- 天天观点:NVIDIA御用游戏《赛博朋克2077》终于支持DLSS 3:性能暴涨3.9倍!
- 天天热推荐:机械硬盘:彻底陨落
- 天天热头条丨地球最黑暗的时刻:被狂轰滥炸长达2000万年
- 信息:游客岳飞观高喊“还我河山” 砸打秦桧像:景区已报警
- 焦点热文:丰田章男:一年卖出1049万辆汽车!却败给了电动车
- 环球快报:特斯拉2022年在华营收181.45亿美元:占比降至约22%
- 天天微动态丨千呼万唤始出来 《赛博朋克2077》正式支持DLSS3
- 神十五乘组太空过春节!这一看就是咱中国的空间站:红红火火
- 直播:5万年一遇绿色彗星逼近地球 肉眼可见
- 世界焦点!河南矿山开工招聘电话被打爆:因6100万奖金火出圈
- 天天热议:对不起!《狂飙》反派集体直播“道歉”:阵势让网友欢呼太上头
- 观热点:日本厂商2023年推出新款磁带收音机:支持U盘数据转录
- 天天日报丨戴尔灵越Pro 2023系列上架:13代酷睿P系 5999元起
- 天天观焦点:女子有洁癖:每天消杀双手10次 结果患乏脂性皮炎
- 最新快讯!彻底消灭自燃!宝马今年开始测试固态电池:计划两年后装车
- 世界信息:情人节倒计时 国外动物园想出报复前任的绝妙点子:蟑螂惨了
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天最资讯丨React框架运行机制
(资料图)
React框架运行主流程1.JSX是JS语言的扩展,被babel编译后,会转换成React.creatElement(),这个方法返回的是一个虚拟DOM。2.将虚拟DOM渲染到真实DOM的方法是ReactDom.render()。在React的组件生命周期中,render是灵魂,它创建一个虚拟Dom;生命周期方法是躯干,负责事件的承载。组件挂载1.constructor()初始化state数据2.componentWillMount()3.render()4.componentDidMount()组件的更新通过调用setState,生成一个新的VMDom, 新的VMDom与旧的VMDom相比,生成一个差异对象,然后遍历差异对象,更新真实Dom。组件的更新路径有两条:如果是父组件主动触发的,走上面那条线,会调用componentWillReceiveProps()如果是组件内部的state状态变化触发的,走右边那条组件自更新路线。公共路线:1.shouldComponentUpdate()2.componentWillUpdate()3.render()4.componentDidUpdate()组件的卸载组件的卸载只有一条方法的调用:1.componentWillUnMount()setState更新数据机制1.setState是异步任务更新的,所以在setState后面做同步数据获取拿到的数据是之前的值。2.连续调用多次setState,只会触发一次重新渲染,原因是React内部会合并连续的setState调用,提高刷新性能。连续两次this.setState,同步获取的this.state.count是没有修改前的,连续2次的this.setState是无效的,在更新前会做合并,只有一次是有效的。console.log("更新前:",this.state.count)this.setState({ count: this.state.count + 1})console.log("更新后1:",this.state.count)this.setState({ count: this.state.count + 1})console.log("更新后2:",this.state.count)推荐使用第二种通过传入箭头函数,拿箭头函数中的state参数,此参数表示最新的state值,所以虽然下面的this.setState是异步方法,但是连续的2次调用,对state的修改是有序的,最终的结果是修改2次的结果
//state:最新的状态,props:最新的propsthis.setState((state, props)=>{ return { count: state.count + 1 }})console.log("更新后1:",this.state.count)this.setState((state, props)=>{ return { count: state.count + 1 }})console.log("更新后2:",this.state.count)this.setState的第二个参数是回调函数,表示在状态更新完成后并且DOM渲染完成后,立即回调。
this.setState({ count: this.state.count + 1},() => { console.log("状态更新后,DOM页面渲染后:", this.state.count)})JSX的转换流程1.代码中用jsx写的ele元素
const ele =2.被babel转换器转换后的React语句标题
React.createElement("h2", {id:"title"}, React.createContext("标题"))3.React底部对ele元素的底层实现,是一个简单的js对象
$$typeof: Symbol(react.element)key: nullprops: children: "标题" id: "title" [[Prototype]]: Object ref: nulltype: "h2"_owner: null_store: {validated: false}_self: undefined_source: {fileName: "/Users/zhoufei/Documents/React/web/my-app/src/my-src/Principle.js", lineNumber: 5, columnNumber: 13}[[Prototype]]: ObjectReact的UI刷新机制setState会触发刷新,触发流程分2步1.更新状态数据2.刷新UI第二步的刷新UI是局部递归刷新的。比如点击了页面中的子组件B,那么只会在子组件B和其子孙组件触发UI刷新,其他的兄弟组件和父组件是不刷新的。React组件性能优化1.减轻state2.组件避免不必要的刷新减轻statestate的修改会触发渲染,如果变量与渲染无关,那么就不要放在state中,放到this的成员变量中就可以了。比如创建一个定时器,将定时器id放到this.timerID上。组件避免不必要的刷新根据组件的刷新机制,如果父组件刷新,那么它里面的所有子组件,子孙组件都要进行刷新,对于状态没有修改的情况下,重复刷新是浪费性能。可以在下面的方法判断是否需要进行刷新。shouldComponentUpdate(nextProps, nextState, nextContext),返回false不进行刷新。1.父组件内,判断this.state.count === nextState.count
shouldComponentUpdate(nextProps, nextState, nextContext) { //this.state: 之前的状态 //nextState: 后面要修改的状态 if (this.state.count === nextState.count) { return false } else { return true } //优化 //return this.state.count !== nextState.coun}2.子组件内判断this.props.count !== nextProps.count
class Child extends React.Component{ shouldComponentUpdate(nextProps, nextState, nextContext) { return this.props.count !== nextProps.count } render() { return (3.使用纯组件React.PureComponent替换React.ComponentPureComponent内部会自动实现方法shouldComponentUpdate,并对state和props分别比较,相同的话就返回false,取消渲染。子组件入参计数:{this.props.count}); }}
class PureChild extends React.PureComponent{ render() { console.log("纯子组件 render") return (纯组件中的对比采用的是shallow compare,浅对比,如果是基本类型就是直接进行对比,如果是引用类型就对比其内存地址对比。所以,如果是要对比对象或数组,那么就用...解包新建一个,这样会有新的内存地址。纯子组件入参计数:{this.props.count}); }}
class PureChild extends React.PureComponent{ state = { obj: { count: 0 }, list: [ "jack" ] } hanleClick = () => { //对象,数组的对比要采用新建的方式 this.setState({ count: {...this.state.obj, count: 1}, list: [...this.state.list, "lucy"] }) } render() { console.log("纯子组件 render") return (虚拟DOM与Diff算法虚拟DOM:是一个js对象,用来描述你希望展示到屏幕上的内容。虚拟DOM和Diff算法一起渲染流程:1.根据state信息和jsx,在render后共同组成了一个虚拟DOM。2.然后将虚拟DOM渲染render,变成真实的DOM。3.当state信息变化时,React会生成一个新的VM DOM。4.将新旧VM DOM进行对比,生成差异对象。5.遍历差异对象,将差异对象更新到真实的DOM上。render方法调用并不是说会刷新这个DOM树,而是生成了一个新的虚拟DOM,要开始diff了。然后再将新生成的VM DOM与旧的VM DOM对比找到修改的差异对象,然后将这个差异对象渲染到屏幕上。虚拟DOM的价值虚拟DOM的最大价值不是让渲染性能更高了,而是让React脱离了浏览器的真实DOM而存在只要能执行js的地方,都可以运行React。所以React是面向虚拟DOM编程的,它可以将虚拟DOM根据不同的平台转换成不同的真实DOM。IOS,安卓转换成原生控件,浏览器转换成页面标签。Vue的虚拟DOM思想就是借鉴了React的虚拟DOM。纯子组件入参计数:{this.props.count}); }}
天天最资讯丨React框架运行机制
netcore之异步并不是多线程!
天天观点:NVIDIA御用游戏《赛博朋克2077》终于支持DLSS 3:性能暴涨3.9倍!
天天热推荐:机械硬盘:彻底陨落
天天热头条丨地球最黑暗的时刻:被狂轰滥炸长达2000万年
信息:游客岳飞观高喊“还我河山” 砸打秦桧像:景区已报警
焦点热文:丰田章男:一年卖出1049万辆汽车!却败给了电动车
环球快报:特斯拉2022年在华营收181.45亿美元:占比降至约22%
天天微动态丨千呼万唤始出来 《赛博朋克2077》正式支持DLSS3
神十五乘组太空过春节!这一看就是咱中国的空间站:红红火火
天天热头条丨MySQL之MVCC总结理解
环球关注:autojs实例02-为朋友圈指定好友点赞
Prometheus&Grafana基本使用
直播:5万年一遇绿色彗星逼近地球 肉眼可见
python教程:shutil高级文件操作
当前播报:自定义ConditionalOnXX注解(二)
世界焦点!河南矿山开工招聘电话被打爆:因6100万奖金火出圈
天天热议:对不起!《狂飙》反派集体直播“道歉”:阵势让网友欢呼太上头
观热点:日本厂商2023年推出新款磁带收音机:支持U盘数据转录
天天日报丨戴尔灵越Pro 2023系列上架:13代酷睿P系 5999元起
DDS结构的FPGA实现
【算法训练营day34】LeetCode1005. K次取反后最大化的数组和 LeetCode134. 加油站 LeetCode135. 分发糖果
天天观焦点:女子有洁癖:每天消杀双手10次 结果患乏脂性皮炎
最新快讯!彻底消灭自燃!宝马今年开始测试固态电池:计划两年后装车
世界信息:情人节倒计时 国外动物园想出报复前任的绝妙点子:蟑螂惨了
当前速讯:宏碁杀入显卡市场!通吃Intel/AMD、不碰NVIDIA
新资讯:《狂飙》热播!湖南一网吧凌晨变《狂飙》专场
实时焦点:如何手动补充陈年老库(或纯 JS 代码)的 TypeScript 类型?
中国新车质量榜:前四均被合资车企包揽 本田最大赢家
刷新中国影史记录!2023年院线全年总票房已破百亿
播报:男生和女生初四相亲初八订婚:称不想耽误节后上班!网友惊到
全球热头条丨《黑豹2》中国角色海报发布:全员黑色皮肤 2月7日上映
看点:我国自研水陆飞机!“鲲龙”AG600M全面进入型号取证试飞阶段
博客园主题美化DIY教程
全球短讯!优秀前端都应该具备的开发好习惯,坚持了效率翻倍
每日视讯:有博主称《满江红》制作成本不到1000万!歌手胡彦斌一番话上了热搜第一
视焦点讯!Xbox月活用户突破1.2亿!微软赢麻了
全球快看:强盛集团橱窗上架《孙子兵法》:还卖小灵通手机壳
迄今为止最庞大的公版显卡来了?RTX 4090Ti/Titan曝光
比亚迪正式进军日本市场卖车:“两田一产”如临大敌
世界消息!Linux 服务器Python后台运行服务(ssh断开不退出)
资讯推荐:Docker-consul的容器服务更新与发现
【天天时快讯】记录--手把手教学,实现一个优雅的图片预览
每日快报!首款车明年量产!小米汽车最新专利公布:手表控制车有戏
天天热文:A卡游戏画面鲜艳 N卡灰蒙蒙?可能是这里设置错了
焦点播报:北美杀入前十后《流浪地球2》官宣:2月9日在中国香港及澳门上映
焦点简讯:三体人为什么那么害怕地球人的加速器?中科院科普
中国航天科技喊话《流浪地球2》:太空天梯、地球车站、空间驿站有望实现
全球报道:网易二面:CPU狂飙900%,该怎么处理?
每日看点!男子打赏女主播1.8万后起诉欲要回!最终被驳回诉求
焦点速递!男子寄5万元笔记本被摔坏索赔遭拒:屏幕、键盘都烂了 维修要2万
动视暴雪点赞《最后生还者》:索尼令人敬畏 我们被收购是应该的
天天热头条丨官网12.4万元帕纳梅拉遭抢购 保时捷:情况属实 已与首单用户达成协议
当前观察:索尼PS5现货全开放!黄牛惨了:带大量机器退货遭拒
环球资讯:Redis数据结构实战演练,看看微博、微信、购物车、抽奖小程序是如何使用的?
全球聚焦:【促进开发】上海道宁与DHTMLX为您提供易于使用且功能丰富的JavaScript组件
APITable:免费开源的多维表格与可视化数据库,上线1天斩获GitHub星标1000+
今日精选:HTTP笔记1--网络模型
环球速讯:selenium + python自动化测试环境搭建
刘慈欣:30年前拍不成《流浪地球2》 投资人不会信的
观热点:SSD性能领先35倍 机械硬盘命悬一线:没啥理由买
【全球速看料】流浪小狐狸投奔看守所1年胖成球:今年要帮它减肥
不止砍掉UFS 4.0:三星Galaxy S23标准版遭全方位缩水
c++代码实现中时间复杂度的不断优化
聚焦:一步一步实现若依框架--2.4数据权限 data_scope
800W功耗!RTX 4090 Ti四插槽"核弹"真的有 但不一定能生出来
全球微速讯:《最后生还者》剧集第3集与游戏对比 还原度高
实时焦点:摩托骑手广东高速上恶意损坏其他车辆 官方回应:一刀切禁摩很好?
天天观察:云萌 V2.6.3.0 win10,win11 Windows永久激活工具
热推荐:基于Spring Cache实现Caffeine、jimDB多级缓存实战
portswigger 靶场之 XSS 篇 (下)
全球最新:【算法训练营day32】LeetCode122. 买卖股票的最佳时机II LeetCode55. 跳跃游戏 LeetCode45. 跳跃游戏II
部署Kubernetes Cluster
每日短讯:12.4万买新帕纳梅拉!近600名国内网友保时捷官网疯抢:成功下单后被取消
【全球时快讯】奔驰获全球首家L3级自动驾驶认证:开车不用看路 出事故奔驰负责
【快播报】优酷回应1元会员被扣24元争议:活动规则已告知 扣钱没毛病
当前热文:水墨风场景惊艳!《仙剑奇侠传7》DLC《人间如梦》官宣2月发售
彻底扑灭一台特斯拉Model S有多难 消防员实测:用了22.7吨水
天天快消息!Android 软键盘丝滑切换(一)
天天看点:视频发布失败原因不好找?火山引擎数智平台这款产品能帮忙
速看:OpenYurt v1.2 新版本深度解读(一): 聚焦边云网络优化
【环球播资讯】小鹏股价暴跌、交付量惨淡 何小鹏专访回应:未来会这么做
全球动态:全球首个!婴幼儿视功能损伤手机智能筛查系统面世
撸猫手感 绿联iPhone 12-14系列液态硅胶保护壳9.9元起
天天快看点丨海淘不香了!日版Xbox主机涨价将近260元
天天速递!全国首烧?疑似红旗E-HS9充电时起火 现场黑烟弥漫
瑾娘为什么要杀华裳?瑾娘为什么假扮巽芳?
爱在旅途大结局是什么?爱在旅途剧情介绍
法国属于西欧还是北欧?南欧包括哪些国家?
荷兰为什么被称为水之国?荷兰水之国的资料简介
长宽高的英文缩写分别是什么?长宽高怎么算平方?
oppor7手机版本低怎么升级?oppo r7手机参数
复工第一天:请马上卸载这个恶心的软件!!!
全球看热讯:python-paramiko操作的封装
无法定位序数是什么意思?无法定位序数怎么解决?
打印机驱动在电脑哪里找?如何卸载打印机驱动?
无线适配器或访问点有问题是什么意思?无线适配器或访问点有问题怎么处理?
魅族手机怎么样?魅族手机锁屏密码忘了怎么解开?
环球速讯:工信部明天起优化调整微波频率 为5G/6G预留频谱资源
【独家】美国下手真狠!沃尔沃在美被罚8.7亿元 史上最大