React面试

news2024/11/24 12:08:44

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.coloradmin.cn/o/1579283.html

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

相关文章

lua学习笔记13(一些特殊用法的学习和三目运算符的实现)

print("*****************************一些特殊用法的学习*******************************") print("*****************************多变量赋值*******************************") local a,b,c114514,8848,"凌少" print(a) print(b) print(c) -…

C#操作MySQL从入门到精通(7)——对查询数据进行简单过滤

前言 我们在查询数据库中数据的时候,有时候需要剔除一些我们不想要的数据,这时候就需要对数据进行过滤,比如学生信息中,我只需要年龄等于18的,类似这种操作,本文就是详细介绍如何对查询的数据进行初步的过滤。 1、等于操作符 本次查询student_age 等于20的数据,使用我…

导出加入域控的电脑清单

要导出加入域控的所有电脑清单&#xff0c;包括计算机名等基本信息&#xff0c;可以使用 PowerShell 中的 Get-ADComputer cmdlet。下面是一个基础示例脚本&#xff0c;用于从Active Directory (AD)中批量导出所有加入域的计算机名称及可能的其他相关信息&#xff0c;并将其保存…

Mudbus协议CRC校验码C#

Mudbus协议CRC校验码C# 什么是modbus协议特点协议格式modbus-crc16校验原理方法帧校验CRC计算方法&#xff1a;例子 C#代码Demo源码下载 什么是modbus Modbus是一种串行通信协议&#xff0c;最初由Modicon&#xff08;目前属于施耐德电气公司&#xff09;于1979年开发 Modbus协…

设计模式之访问者模式讲解

概念&#xff1a;封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变数据结构的前提下定义作用于这些元素的新操作。 抽象访问者&#xff1a;声明一个或多个访问操作&#xff0c;定义访问者可以访问哪些元素。具体访问者&#xff1a;实现抽象访问者的所有操…

2-4 AUTOSAR ASW Port端口

返回总目录->返回总目录<- 一、端口Port 软件组件的端口根据输入/输出方向可分为需型端口(Require Port,RPort)与供型端口(Provide Port,PPort),以及供需端口(Provide and Require Port,PRPort)。 需型端口可以和供型端口连接。 需型端口:用于从其他软件组件获…

多线程原理详解01(程序、进程、线程介绍,线程创建的三种方式(Thread、Runnable、Callable)、三种方式各自实现多线程的具体操作、代码解析)

目录 多线程原理详解01_线程简介多任务多线程程序、进程、线程Process&#xff08;进程&#xff09;与 Thread &#xff08;线程&#xff09;总结&#xff1a; 02_线程创建三种方式&#xff1a;1、继承 Thread 类1-1&#xff1a;通过继承Thread类实现多线程演示代码 1-2&#x…

干货分享 | 在TSMaster中加载基于DotNet平台的SeedKey

在UDS诊断过程中&#xff0c;会涉及到安全访问的问题&#xff0c;也就是所谓的Seed&Key。TSMaster 诊断模块支持通过.dll文件载入 Seed&Key 算法用于安全访问解锁。在最近发布的TSMaster 2024.03版本中不仅支持了C/C&#xff0c;Delphi等语言封装的DLL文件&#xff0c;…

基于GD32的简易数字示波器(3)- PCB设计

这期记录的是项目实战&#xff0c;做一个简易的数字示波器。 教程来源于嘉立创&#xff0c; 本期介绍PCB设计的大致流程。 下图为示波器的指标 具有选择交流耦合还是直流耦合功能、输入信号不衰减或衰减50倍 输入频率理论最大800KHz输入幅值&#xff08;不衰减&#xff09;…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(四)- 配置和设置指令(vsetvli/vsetivli/vsetvl)

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

SUSE Linux Enterprise Server安装

1. SUSE镜像下载 下载地址&#xff1a;Evaluation Copy of SUSE Linux Enterprise Server | SUSE 选择自己需要的版本和对应的架构 选择下载SLE-15-SP5-Full-x86_64-GM-Media1.iso&#xff0c;下载时需要注册请按照提示进行注册。 2. 安装SUSE Linux 安装时可以通过连接服务…

MySQL高级(索引结构Hash,为什么InnoDB存储引擎选择使用B+tree索引结构?)

目录 1、Hash索引结构 2、Hash索引特点 3、存储引擎支持 4、为什么InnoDB存储引擎选择使用Btree索引结构&#xff1f; 1、Hash索引结构 哈希索引就是采用一定的hash算法&#xff0c;将键值换算成新的hash值&#xff0c;映射到对应的槽位上&#xff0c;然后存储在hash表中。 如…

希尔排序解读

在算法世界中&#xff0c;排序算法是至关重要的一部分。而希尔排序&#xff08;Shell Sort&#xff09;作为一种基于插入排序的改进算法&#xff0c;通过允许交换非相邻元素&#xff0c;从而在一定程度上提高了排序效率。本文将深入探讨希尔排序的原理、实现方式以及它的性能特…

电商技术揭秘十五:数据挖掘与用户行为分析

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

【3GPP】【核心网】核心网/蜂窝网络重点知识面试题一(超详细)

目录 1. 核心网技术演进、各大运营商采用的技术是什么&#xff1f; 2. 整体掌握lte网络架构&#xff0c;能画出网络拓扑&#xff0c;并指出关键接口的位置 3. 对于主要的LTE核心网网元&#xff0c;讲讲自己对其功能的理解 4. 核心网常用字段概念&#xff1a;imsi、msisdn、…

Python学习从0到1 day21 第二阶段 面向对象 ④ 类型注解

仗剑红尘已是癫&#xff0c;有酒平步上青天 —— 24.4.7 一、变量的类型注解 学习目标 1.理解为什么使用类型注解 2.掌握变量的类型注解语法 为什么使用类型注解 tip&#xff1a;CTRLP&#xff0c;可以提示函数中传入的参数 当我们需要使用pycharm的自动补全功能&#xff0c;又…

论如何在小程序展示超链接在线网页

在工作中遇到一个需求&#xff0c;就是在小程序中展示超链接网页&#xff0c;起初我是直接使用web-view标签 <web-view src"https://www.baidu.com/"/>但是web-view只能在开发阶段手机上展示&#xff0c;一旦小程序发布线上&#xff0c;就会出现下面这种情况“…

Unity类银河恶魔城学习记录12-7-2 p129 Craft UI - part 2源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftWindow.cs using UnityEngine.UI; using TMPro; using UnityEngin…

如何通过跨网软件,实现网络隔离后的文件安全收发摆渡?

随着企业数字化转型的逐步深入&#xff0c;企业投入了大量资源进行信息系统建设&#xff0c;信息化程度日益提升。绝大多数企业为了防止内部核心数据泄露&#xff0c;会实施网络隔离&#xff0c;比如内外网隔离&#xff0c;或者在内部网络中又划分出研发网、办公网、生产网等。…

三、SpringBoot3 整合 SpringMVC

本章概要 实现过程web 相关配置静态资源处理自定义拦截器(SpringMVC 配置) 3.1 实现过程 创建程序引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www…