【React常见面试题】

2023-11-09

对react的理解?有哪些特性?

React是一个前端js框架
React高效灵活
声明式设计,使用简单
组件式开发,提高代码的复用率
单向的数据绑定比双向的数据绑定更加安全

Real diff算法是怎么运作的?

1)Diff算法是虚拟DOM的一个必然结果,它是通过新旧DOM的对比,
将在不更新页面的情况下,将需要内容局部更新
2)Diff算法遵循深度优先,同层比较的原则
3)可以使用key值,可以更加准确的找到DOM节点
react中diff算法主要遵循三个层级的策略:
tree层级
conponent 层级
element 层级
tree层不会做任何修改,如果有不一样,直接删除创建
component层从父级往子集查找,如果发现不一致,直接删除创建
element层有key值做比较,如果发现key值可以复用的话,就会将位置进行移动,如果没有,则执行删除创建

React生命周期有哪些不同的阶段?每个阶段对应的方法?

挂载卸载过程
constructor,完成了React数据的初始化;
componentWillMount,组件初始化数据后,未渲染DOM前;
componentDidMount,组件第一次渲染完成,dom节点已经生成;
componentWillUnmount,组件的卸载和数据的销毁。
更新过程
componentWillReceiveProps (nextProps),父组件改变后的props需要重新渲染组件时;
shouldComponentUpdate(nextProps,nextState),主要用于性能优化(部分更新),
因为react父组件的重新渲染会导致其所有子组件的重新渲染,这个时候不需要所有子组件都跟着重新渲染,
然后return false就可以阻止组件的更新;
componentWillUpdate (nextProps,nextState),shouldComponentUpdate返回true后,
组件进入重新渲染的流程;
componentDidUpdate(prevProps,prevState),组件更新完毕后触发;
render(),渲染时触发

对React中虚拟dom的理解?

1)虚拟DOM本质上是一个Object类型的对象
2)虚拟DOM比较轻,真实DOM比较重,虚拟DOM是React内部使用,虚拟DOM不需要真实DOM上那么多的属性
3)虚拟DOM最终回被React渲染到页面上

对react hook的理解?

1)hook是React新增的一个特性
2)Hook主要解决了函数组件没有生命周期,没有状态,一些自身逻辑的问题,还有提高的代码的复用率
3)Hook的一些方法:useState(),useRef(),useCallBack(),useReduer(),useEffect()

React组件之间如何通信?

React组件之间如何通信
1)父组件向子组件传递:
父组件在调用子组件的时候,在子组件标签内传递参数,子组件通过props属性就能接收父组件传递过来的参数
2)子组件向父组件传递:
父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值
3)兄弟组件之间的通信:
父组件作为中间层来实现数据的互通,通过使用父组件传递
4)父组件向后代组件传递:
使用context提供了组件之间通讯的一种方式,可以共享数据,其他数据都能读取对应的数据
通过使用React.createContext创建一个context;
context创建成功后,其下存在Provider组件用于创建数据源,Consumer组件用于接收数据
Provider组件通过value属性用于给后代组件传递数据
如果想要获取Provider传递的数据,可以通过Consumer组件或者或者使用contextType属性接收
5)非关系组件传递:
将数据进行一个全局资源管理,从而实现通信

Connect组件的原理是什么?

connect 的第一个参数是 mapStateToProps
这个函数允许我们将 store 中的数据作为 props 绑定到组件上
connect 的第二个参数是 mapDispatchToProps
由于更改数据必须要触发action, 因此在这里的主要功能是将 action 作为props 绑定到 组件上
Provider就是react-redux中的一个组件, Provider 做的事情也简单, 它就是一个容器组件, 会把嵌套的内容原封不动作为自己的子组件渲染出来. 它还会把外界传给它的 props.store 放到 context

对redux中间件的理解?常用的中间件有哪些?

1)中间件(Middleware)在计算机中,是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的
2)redux-thunk:用于异步操作
3)redux-logger:用于日志记录
4)redux中间件就是辅助redux不能完成的功能
5)applayMiddleWare()
6)将它包裹在要使用的插件外部

React jsx转换成真实DOM的过程?

使用React.createElement或JSX编写React组件,实际上所有的 JSX 代码最后都会转换成React.createElement(…) ,Babel帮助我们完成了这个转换的过程。
createElement函数对key和ref等特殊的props进行处理,并获取defaultProps对默认props进行赋值,并且对传入的孩子节点进行处理,最终构造成一个虚拟DOM对象
ReactDOM.render将生成好的虚拟DOM渲染到指定容器上,其中采用了批处理、事务等机制并且对特定浏览器进行了性能优化,最终转换为真实DOM

对@reduxjs/toolkit的理解

reduxjs/toolkit:
Redux 官方强烈推荐,开箱即用的一个高效的 Redux 开发工具集。它旨在成为标准的 Redux 逻辑开发模式,使用 Redux Toolkit 都可以优化你的代码,使其更可维护
react-redux:
react官方推出的redux绑定库,react-redux将所有组件分为两大类:UI组件和容器组件,其中所有容器组件包裹着UI组件,构成父子关系。容器组件负责和redux交互,里面使用redux API函数,UI组件负责页面渲染,不使用任何redux API。容器组件会给UI组件传递redux中保存对的状态和操作状态的方法

React render方法的原理,在什么时候会触发?

原理:
在类组件中render函数指的就是render方法;而在函数组件中,指的就是整个函数组件
render函数中的jsx语句会被编译成我们熟悉的js代码,在render过程中,react将新调用的render函
数返回的树与旧版本的树进行比较,这一步是决定如何更新 DOM 的必要步骤,然后进行 diff 比
较,更新dom树
触发时机:
类组件调用 setState 修改状态
函数组件通过useState hook修改状态
一旦执行了setState就会执行render方法,useState 会判断当前值有无发生改变确定是否执行
render方法,一旦父组件发生渲染,子组件也会渲染

React性能优化的手段有哪些?

1)避免使用内联函数
2)使用react fragement 避免额外标记
3)immutable,减少渲染的次数,为了避免重复渲染,会在shouldComponentUpdate()中做对
比,当返回true,执行render方法。immutable通过is方法完成对比
4)懒加载组件
5)事件绑定方式(在constructor中使用bind绑定性能更高)
6)服务端渲染
7)组件拆分,合理使用hooks

对koa中洋葱模型的理解?

Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面:
将node原生的req和res封装成为一个context对象。
基于async/await的中间件洋葱模型机制
Koa的洋葱模型是以next()函数为分割点,先由外到内执行Request的逻辑,然后再由内到外执行Response的逻辑,这里的request的逻辑,我们可以理解为是next之前的内容,response的逻辑是next函数之后的内容,也可以说每一个中间件都有两次处理时机。洋葱模型的核心原理主要是借助compose方法。

借助webpack来优化前端性能?

JS代码压缩
CSS代码压缩
Html文件代码压缩
文件大小压缩
图片压缩
Tree Shaking
代码分离
内联 chunk

借助webpack来优化前端性能?

WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅
客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输
较少的控制开销:数据包头部协议较小,不同于http每次请求需要携带完整的头部
更强的实时性:相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少
保持创连接状态:创建通信后,可省略状态信息,不同于HTTP每次请求需要携带身份验证
更好的二进制支持:定义了二进制帧,更好处理二进制内容
支持扩展:用户可以扩展websocket协议、实现部分自定义的子协议
更好的压缩效果:Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【React常见面试题】 的相关文章

随机推荐

  • numpy.random.choice坑

    numpy random choice 默认是有放回 其中有个 replace 的参数控制 默认是 True 如划分数据集用到 注意重复 Code import numpy as np a np arange 5 print a for i
  • Go-Gateway反向代理,性能比拼Nginx

    前言 在以前的一篇文章 基于Fasthttp实现的Gateway 性能媲美Nginx 中 介绍给大家一款使用Go语言开发的实现反向代理功能的开源项目boot4go gateway boot4go gateway项目以fasthttp作为ht
  • gcc入门及合并静态库

    1 gcc入门 1 gcc即是linux下c c 的编译器 gcc经常用的的选项有 c o c表示只编译 compile 源文件但不链接 会把 c或 cc的c源程序编译成目标文件 二进制文件 一般是 o文件 o用于指定输出 out 文件名
  • C++:内联函数

    1 概念 以inline修饰的函数叫做内联函数 编译时C 编译器会在调用内联函数的地方展开 没有函数调用建立栈帧的开销 内联函数提升程序运行的效率 加inline与未加inline的效果可以通过反汇编查看 由于我使用的是VS2022 我先介
  • VScode使用之搭建linux开发环境

    使用SSH链接linux VScode链接的方法参考如下文章 VScode使用之ssh链接虚拟机 安装C C 插件 安装CMake插件 使用CMake构建项目 新建工程文件夹 main c inc fun h src fun c 快捷键Ct
  • 创建表 DATE类型 DEFAULT默认值

    date类型直接用CURRENT TIMESTAMP或curdate 会报错 是因为在MySQL默认你输入的是一个常量 而不能是一个表达式 如果必须要使用表达式则应该将该表达式整个用小括号包括起来 curdate DDL语句显示如下 参考
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】乱序整数序列两数之和绝对值最小

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 乱序整数序列两数之和绝对值最小 知识点排序数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个随机的整数 可能存在正整数和负整数 数组 nums 请你在该数组
  • Ubuntu 虚拟机无法连接网络、不显示网络图标、没有网络设置

    Ubuntu20 无法连接网络 不显示网络图标 没有网络设置 出现的问题 在VMWare中使用Ubuntu系统时 通常需要设置网络连接但是有时会出现问题 右上角的网络连接的小图标不见了 网络也没有连接 ifconfig也看不到网卡 解决办法
  • Vue2面试题100问

    Vue2面试题100问 Vue2面试题100问 1 简述一下你对Vue的理解 2 声明式和命令式编程概念的理解 3 Vue 有哪些基本特征 4 vue之防止页面加载时看到花括号解决方案有哪几种 5 Vue中v for与v if能否一起使用
  • XML字体配置

    文章目录 一 前言 二 XML字体配置 2 1 创建字体系列 font family 2 2 在XML中使用字体资源 2 3 在编码中使用字体资源 2 4 使用支持库实现 一 前言 在以往的开发中 开发者都是将字体文件放在assets目录下
  • 分库分表 21 招

    一 好好的系统 为什么要分库分表 咱们先介绍下在分库分表架构实施过程中 会接触到的一些通用概念 了解这些概念能够帮助理解市面上其他的分库分表工具 尽管它们的实现方法可能存在差异 但整体思路基本一致 因此 在开始实际操作之前 我们有必要先掌握
  • Linux下如何修改文件权限?(chmod/chown)

    目录 chmod 全称 change mode 修改文件的权限 最常见的修改权限的方式 chown 全称change owner 改变文件所有权 chgrp 用于设置文件的属组 前言 Linux 系统是一种典型的多用户系统 不同的用户处于不
  • Android 13 - Media框架 - 异步消息机制

    由于网上已经有许多优秀的博文讲解了Android的异步消息机制 ALooper AHandler AMessage那一套 而且流程也不是很复杂 所以这里将不会去讲代码流程 本篇将会记录学习过程中的疑问以及自己的解答 希望可以帮助有同样疑问的
  • 有些写法是正确的,但是为什么报错,mybaits

    这是低版本3 1 1根本不支持map迭代key和value 高版本则支持 多了一个map
  • OpenCV学习记录之视频中的火焰检测识别

    主要完成两个视频中火焰的检测 主要结合RGB判据和HIS判据 设定合适的阈值条件 检测出火焰对应像素的区域 将原图二值化 经过中值滤波以及数学形态学的膨胀运算等图像处理 消除一些噪声及离散点 连通一些遗漏的区域 基于OpenCV的开源库 在
  • 区块链将引入一种全新的语言 开启加密经济新时代

    本质上 区块链是一种永久保存交易记录的科技 而且交易记录无法被删除 只能序贯更新 从而创建了一条永无止境的历史踪迹 这个看上去简单的功能性描述 却有着意义深远的含义 它引导我们对创建交易 存储数据和移动资产的传统方式进行重新思考 而这一切仅
  • YOLOv5 训练报错记录(持续更新中...)

    1 AttributeError Can t get attribute C3 AttributeError Can t get attribute C3 on
  • STM32 HAL库实战(一)使用STM32驱动双通道12位DAC(TLV5618)

    TLV5618参考资料 TLV5618是德州仪器公司研发的一种双通道12 bit数模转换器 具有较宽的电压输出范围和2倍增益 本文参考资料 TLV5618 DataSheet 硬件资源概述 STM32F407ZGTx 192KB RAM 1
  • 华为手机为什么打不开微信连接到服务器,华为手机微信打不开如何解决? 华为手机微信打不开解决方法介绍!...

    您可能感兴趣的话题 华为 手机 微信 打不开 核心提示 华为手机微信打不开如何解决 华为手机微信打不开解决方法是什么 下面小编给大家介绍一下 希望你能喜欢 华为手机微信打不开如何解决 华为手机微信打不开解决方法是什么 下面小编给大家介绍一下
  • 【React常见面试题】

    前端面试题 对react的理解 有哪些特性 Real diff算法是怎么运作的 React生命周期有哪些不同的阶段 每个阶段对应的方法 对React中虚拟dom的理解 对react hook的理解 React组件之间如何通信 Connect