React面试

React渲染流程(重点)

jsx描述界面
jsx babel render function=>vdom
vdom fiber 在进行渲染
vdom 转换fiber reconcile
转换过程创建dom
commit 到dom

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vdom React Element 对象, 只记录了子节点, 没有记录兄弟节点, 因为渲染不可中断

fiber fiberNode 对象, 是一个链表 父节点 兄弟节点子节点, 可以打断

React Fiber是什么(重点)

Fiber出现背景

React15 Stack Reconciler 同步递归过程, 不可中断
导致页面响应度变差

没有区别优先级

Fiber是什么

对核心调度过程重写
编码: 是一种树节点的数据结构
一个Fiber是一个节点对象

Fiber更新机制

  1. 初始化流程
    创建fiberRoot
    rooterFiber(ReactDom.render 或者 ReactDom.createRoot)

  2. beginwork

  • wip内存中构建workinprogreess fiber
    第一次更新后 current树

current: 视图层渲染的树 current fiber树

  1. 深度调和子节点渲染视图
    alernate树, 完成整个子节点便利, 包括fiber创建, wip树作为最新树, 完成初始化流程

更新
重新wip树

双缓存模式

减少页面抖动与卡顿,减少fiber节点性能损耗

为什么不能直接使用this.state改变数据

并不会重新触发render组件不重新渲染

this.state.message = ‘xxxxx’ // xx

不触发render
setState() // 触发render 页面响应

this.setState({message: 'hello'
})

setState 将需要更新的数据放到状态队列,并不会立刻更新状态setState
可以更高效的进行批量更新state

Redux工作原理

状态管理库

  • 跨层级的数据共享与通信

  • 需要持久化全局数据, 用户登录信息

  • Store 一个全局状态管理对象

  • Reducer 一个纯函数根据旧的state 和 props更新到state

  • Action 改变状态的唯一方法 dispatch action
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

React-Router工作原理

为什么需要前端路由

  • 早期: 用户体验差
  • spa 单页应用 seo不友好
  • 记住用户操作

解决什么问题

  • 刷新页面 根据url对资源进行重定向
  • 根据url映射到不同内容
  • 拦截用户刷新操作: 感知url变化

react-router-dom有哪些组件

HashRouter BroserRouter 路由器
Router 路由匹配
Link 连接
NavLink 当前活动的连接
Switch路由跳转
Redirect 路由重定向

核心:跳转页面
路由: 定义路由与组件映射关系
导航: 复杂触发路由改变

BroserRouter html5 history api实现路由跳转
popState

HashRouter url的hash 属性
#xx
hashChange 触发路由更新

React Hook(重点)

区别

  • 类组件需要生命周期 constructor 函数组件不需要
  • 类组件需要手动绑定 this, 函数组件no
  • 类: 有生命周期 函数:no 通过useEffect模拟生命周期
  • 类组件: 维护自己state, 函数: 无状态
  • 类: 需要集成 函数不需要
  • 类: 面向对象方法 封装: 组件属性方法, 封装到组件内部, 继承extends React.Component
    函数: 函数式编程思想

why React hooks

  • 告别难以理解的class 组件
  • 解决业务逻辑难拆分
  • 使状态逻辑复用简单
  • 设计理念: 函数式编程思想

局限性

  • 不能完整对函数组件提供类组件能力

  • 对dev提出更高要求

  • hooks规则约束

  • useEffect 监听数据变化

  • useMemo 缓存变量. 如果依赖不变化,不触发回调函数更新,不触发页面重新渲染

  • useState 维护自己数据

  • useEffectLayout

  • useCallback 缓存函数. 如果依赖不变化,不触发回调函数更新函数,不触发页面重新渲染

React 常用组件

Portal

让子组件渲染在除了父组件之外的dom节点地方

ReactDom.createPortal(child, container)

-弹窗 提示框

Fragment

包裹子列表, 不产生额外dom节点方法

Context

props

跨层级组件数据传递方法

Transition

React 18 引入 并发特性, 允许操作被中断

React中用户如何根据不同权限,查看不同页面?

  1. js
    1. ajax role->请求不同的memuList json,展示有权限菜单
  2. react-router
    1.onEnter
<Router path="/home" component={App} onEnter={(nextState, replace)=>{// 根据菜单判断用户信息const uid = utils.getUrlParams(nextState, 'uid');if(!uid){replace('/')}else{// 展示用户信息}}
}>封装一个privateRouter

React事件机制(重点)

什么是合成事件
事件触发, 事件冒泡 事件捕获 事件合成 派发

作用:

  • 底层磨平不同浏览器之前差异, 暴露稳定, 统一 与原生事件相同接口
  • 把握主动权, 中心化控制
  • 引入事件池 避免频繁创建销毁

与原生dom事件区别
包含对原生dom事件引用 e.nativeEvent

dom事件流如何工作?

  1. 事件捕获
  2. 处于目标
  3. 事件冒泡

React16 绑定在document
React17 绑定在container ReactDom.render(app, container)

  1. 事件绑定在container上, 减少内存开销
  2. 自身实现冒泡机制, 不能通过return false组织冒泡
  3. 通过SytheticEvent 实现事件合成

React事件与普通HTML事件有什么区别?

  • 事件名称

  • 原生: 全小写

  • react: onClick 小驼峰

  • 事件处理函数

  • 原生: 字符串

  • react: onClick={}

  • 阻止浏览器本身默认行为

  • 原生: return false

  • react: preventDefault()

VDOM合成事件
模拟原生DOM模拟原生DOM行为

cross platform react所有事件全部存放在数组中

为什么需要使用Hooks

  1. 复杂组件
    componentDidMount, componentDidUpdate, componentWillUnmount

    1. addEventListener removeEventListener
    2. useEffect(()=>{}, [])

便于将逻辑抽离到useEffect, 实现高内聚,低耦合
2. class
1. this

Fragments

保证函数唯一的根节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux大文件IO

在Linux中处理大文件&#xff08;通常指大小超过2GB的文件&#xff09;时&#xff0c;需要使用特定的系统调用和标志&#xff0c;以确保程序能够正确地处理大文件的读写。这主要是因为在32位系统上&#xff0c;传统的文件偏移量和文件大小使用off_t类型表示&#xff0c;它通常是…

HarmonyOS 开发-MpChart运动健康场景实践案例

介绍 MpChart是一个包含各种类型图表的图表库&#xff0c;主要用于业务数据汇总&#xff0c;例如销售数据走势图&#xff0c;股价走势图等场景中使用&#xff0c;方便开发者快速实现图表UI&#xff0c;MpChart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图…

SQLite数据库概述及在Java中的应用

## 什么是SQLite数据库&#xff1f; SQLite是一种轻量级的数据库管理系统&#xff0c;它不需要一个独立的服务器进程或操作系统的运行&#xff0c;而是将整个数据库&#xff0c;包括定义、表、索引以及数据本身&#xff0c;全部存储在一个独立的磁盘文件中。SQLite的设计理念是…

shell命令行中脚本特殊注释指定脚本解释器

在Linux系统中&#xff0c;#!/usr/bin 是一个特殊的注释&#xff0c;通常称为"shebang" 或 “hashbang”。用于指定脚本的解释器。 即它的目的是告诉操作系统应该使用哪个解释器来执行脚本。 通过在脚本的第一行使用#!&#xff0c;后面跟着解释器的路径&#xff0c;…

GIF在线生成器

上传图片就能生成GIF的前端WEB工具 源码也非常简单 <!DOCTYPE html> <html lang"zh" class"dark"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1, m…

【opencv】示例-drawing.cpp画线、箭头、矩形、多边形、椭圆、圆形以及在图像上渲染文本并通过循环实现动态绘制效果...

#include "opencv2/core.hpp" // 引入opencv2核心头文件 #include "opencv2/imgproc.hpp" // 引入opencv2图像处理头文件 #include "opencv2/highgui.hpp" // 引入opencv2高级GUI(head-up display)头文件 #include <stdio.h> // 引入标准输…

生成随机图片验证码

随着互联网的不断发展&#xff0c;安全性问题日益突出。为了保障用户账号的安全性&#xff0c;很多网站都引入了验证码机制。验证码是一种区分用户是计算机还是人的公共全自动程序&#xff0c;可以有效防止恶意攻击和自动化脚本的滥用。本文将介绍如何使用Python生成随机图片验…

论文笔记:面向实体的多模态对齐与融合网络假新闻检测

整理了2022TMM期刊 Entity-Oriented Multi-Modal Alignment and Fusion Network for Fake News Detection&#xff09;论文的阅读笔记 背景模型改进的动态路由算法Cross-Modal Fusion 实验 背景 现有的假新闻方法对多模态特征进行各种跨模态交互和融合&#xff0c;在检测常见假…

什么是DDOS安全防护?都有哪些防护措施?

DDOS安全防护是一种针对分布式拒绝服务器攻击的安全措施&#xff0c;DDOS攻击主要是通过向目标服务器发送大量的服务请求或者是无效流量&#xff0c;给服务器造成一定的压力&#xff0c;从而导致服务器不可用的攻击方式&#xff0c;DDOS安全防护主要是保护网络和服务器不会受到…

MT3022 召唤神龙

思路&#xff1a;二分答案 。check():检查组p套卡是否成立&#xff0c;即检查r卡是否足够组成p套卡。 &#xff08;易错点&#xff1a;check的思路&#xff0c;开long long&#xff09; #include <bits/stdc.h> using namespace std; long long int n, m; long long int…

【VScode】同时编辑多处

【VScode】同时编辑多处 1. 多光标自定义批量编辑2. 选择多个&#xff0c;同时操作(批量选中局部匹配项)3. 取消选择4. 在不移动光标的情况下滚动屏幕5. 批量选中全局匹配项6.重点6.1 通过上下键选择多行6.2 同时选中所有行的末尾6.3 选中多列另一种方式6.4 通过正则的方式配置…

东方博宜 1582. 马里奥的银币2

东方博宜 1582. 马里奥的银币2 思路&#xff1a;这道题好简单~ 注意的点是 n/2 要记得变成浮点数 n/2.0 或者 n*1.0/2 #include<iostream> using namespace std; int main() {int a[1001] ;int n ;cin >> n ;for(int i 0 ; i < n ; i){cin >> a[i] ;}…

C++奇迹之旅:探索类对象模型内存的存储猜想

文章目录 &#x1f4dd;前言&#x1f320; 类的实例化&#x1f309;类对象模型 &#x1f320; 如何计算类对象的大小&#x1f309;类对象的存储方式猜想&#x1f320;猜想一&#xff1a;对象中包含类的各个成员&#x1f309;猜想二&#xff1a;代码只保存一份&#xff0c;在对象…

蓝桥杯——运动会

题目 n 个运动员参加一个由 m 项运动组成的运动会&#xff0c;要求每个运动员参加每个项目。每个运动员在每个项目都有一个成绩&#xff0c;成绩越大排名越靠前。每个项目&#xff0c;不同运功员的成绩不会相 同&#xff0c;因此排名不会相同。(但是不同项目可能成绩会相同) 每…

CST电磁仿真基本单位设置和保存结果【仿真教程】

保存结果的Result Navigator 积累的结果一目了然&#xff01; 用户界面上的Result Navigator 在一个仿真工程中更改变量取值进行仿真分析或者改变设置进行仿真分析时&#xff0c;之前的1DResult会不会消失呢&#xff1f; 1D Result&#xff1a;CST中1D Result指的是Y值取决…

VirusTaxo:病毒物种注释

https://github.com/omics-lab/VirusTaxo 安装 git clone https://github.com/omics-lab/VirusTaxo mamba create -n VirusTaxo python3.10 mamba activate VirusTaxo cd VirusTaxo python3 -m venv environment source ./environment/bin/activate pip install -r require…

DSP笔记12-PWM基础知识及EPWM

PWM pulse width modulation 脉冲宽度调制&#xff0c;宽度可调节的方波脉冲&#xff0c;驱动开关器件&#xff0c; 参数&#xff1a; 1.频率f 1kHz&#xff0c;2kHz开关损耗 2.周期T 3.幅值&#xff0c;高低电平之间电压 gpio输出3.3V&#xff0c;转换成5V高电平输出 4.占…

使用Springboot配置生产者、消费者RabbitMQ?

生产者服务 1、引入依赖以及配置rabbitmq 此时我们通过使用springboot来快速搭建一个生产者服务 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> applica…

【Java SE】8.2多态

目录 1.多态 1.1多态的概念 1.2多态实现条件 1.3重写 1.4向上转移和向下转型 1.4.1向上转型 1.4.2向下转型 1.5多态的优缺点&#xff1a; 1.6避免在构造方法中调用重写的方法 1.多态 1.1多态的概念 多态的概念&#xff1a;通读来说&#xff0c;就是具有多种形态&…

规则引擎之LiteFlow应用

官网地址&#xff1a;LiteFlow DEMO 整体结构 1.引入maven依赖 <dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.11.4.2</version> </dependency> 2. 配置yml …