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

前端面试题——React重点

文章目录

      • React相关问题
        • 1. 函数式组件与Class组件有什么不同?
        • 2. 说说React的fiber架构?
        • 3. 协调
        • 4. 虚拟DOM (Virtual DOM)

React相关问题

1. 函数式组件与Class组件有什么不同?

答:
① 函数式组件不需要继承,直接 “function+组件名” 就可以了;而class组件还需要继承 class DemoClass extends React.Component()
② 函数式组件没有 this 指向的问题,方法定义后直接调用;而class 组件中有this,要考虑 this 指向,事件还需要 bind 绑定
③ 函数式组件写法简单,无生命周期函数,直接用 useEffect 控制执行时机;而 class 需要一系列的生命周期函数控制,写法非常臃肿。相对而言,函数式写法开发效率较高。

附上 Class Component 的生命周期图谱:
react生命周期

2. 说说React的fiber架构?

fiber是为了提升性能所做的优化方案。分批延时的操作 DOM,避免一次性操作大量 DOM,造成浏览器阻塞。
可以理解为一个个纤程。它会把一个耗时很长的 diff 任务碎片化处理,分成多个小片,在每个小片执行完后给其他任务一个机会,不独占整个线程。
(1) 是一种让出机制,优先级较高的先执行。
(2) 保证任务在浏览器空闲时执行。

3. 协调

简单一句话总结:
React组件的 stateprops 发生变化时,会对比变化前后的 DOM 树 。React 会基于这两棵树之间的差异来判断是否更新实际的 UI,它们不相等时,React 才会更新 DOM。这个过程叫做 协调。

4. 虚拟DOM (Virtual DOM)

虚拟DOM就是内存中的DOM元素真实DOM元素 对比,对比方式是以JS对象的形式(即Object:{}),两者不相等时,会将虚拟 DOM 更新到真实 DOM树 中,进而映射到 UI 视图。
优点:避免了整棵 DOM 树变更。
步骤:
(1)用 JavaScript 对象 表示 DOM 树的结构;
(2)对比内存中的DOM与真实的DOM;
(3)发现不同时,只将不同的地方更新到真实DOM树中,更新 UI 视图。

性能优化的扩充知识:使用 key 属性标识在渲染过程中可能不变的子元素,减少内存开销。


文章持续更新中……React继续!

相关文章:

  • 超级详细的PMP复习方法,3A拿下考试不发愁!
  • C语言进阶——通讯录
  • C#语言实例源码系列-实现停车场系统项目-下
  • 我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT
  • 【云原生进阶之容器】第四章Operator原理4.2节--CRD
  • 牛客竞赛每日俩题 - Day14
  • Three.js一学就会系列:05 加载3D模型
  • Python2.x和3.x主要差异总结
  • Vue中引入react组件
  • python的8大核心语句,你确定不来看看嘛,那格局就小啦
  • windows排查问题常用命令
  • 2023年网络安全比赛--跨站脚本攻击中职组(超详细)
  • SkyEye:针对飞行模拟器的仿真解决方案
  • 基于Python + Django 的密码自助平台项目(完整代码)
  • 写作的“收益”超乎想象
  • JavaScript 奇技淫巧
  • Linux下的乱码问题
  • October CMS - 快速入门 9 Images And Galleries
  • php中curl和soap方式请求服务超时问题
  • Python学习之路16-使用API
  • React的组件模式
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 反思总结然后整装待发
  • 每天10道Java面试题,跟我走,offer有!
  • 前端js -- this指向总结。
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 深入浅出Node.js
  • 使用SAX解析XML
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我的业余项目总结
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一个SAP顾问在美国的这些年
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​Linux·i2c驱动架构​
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #define与typedef区别
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $.proxy和$.extend
  • (+4)2.2UML建模图
  • (06)Hive——正则表达式
  • (13)Hive调优——动态分区导致的小文件问题
  • (a /b)*c的值
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三)c52学习之旅-点亮LED灯
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(六):替换字符串中匹配的子串
  • .gitignore文件设置了忽略但不生效
  • .NET 分布式技术比较
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .Net中的设计模式——Factory Method模式