面试题 之 react

1.说说对react的理解

1️⃣是什么
React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念,更高效使用虚拟 DOM 来有效地操作 DOM ,遵循从高阶组件到低阶组件的单向数据流。
react 类组件使用一个名为 render() 的方法或者函数组件 return ,接收输入的数据并返回需要展示的内容。形式就是JSX,最终会babel被编译为合法的 JS语句调用,被传入的数据可在组件中通过this.props 在render() 访问。
2️⃣特性
JSX 语法
单向数据绑定
虚拟 DOM
声明式编程
Component
3️⃣优势
高效灵活
声明式的设计,简单使用
组件式开发,提高代码复用率单向响应的数据流会比双向绑定的更安全,速度更快

2.state和props区别

1️⃣state
一个组件的显示形态可以由数据状态和外部参数所决定,而数据状态就是 state ,一般在 constructor 中初始化,当需要修改里面的值的状态需要通过调用 setState 来改变。
setState 还可以接受第二个参数,它是一个函数,会在 setState 调用完成并且组件开始重新演染时被调用,可以用来监听渲染是否完成
2️⃣props
props理解为从外部传入组件内部的数据,react 具有单向数据流的特性,所以他的主要作用是从父组件向子组件中传递数据。props 可以传字符串,数字,传递对象,数组,回调函数。
props 在内部不可变的,如果想要改变它看,只能通过外部组件传入新的 props 来重新渲染子组件,否则子组件的 props 和展示形式不会改变
3️⃣区别
相同点:
两者都是 JavaScript 对象
两者都是用于保存信息
props 和state 都能触发渲染更新
区别:
props 是外部传递给组件的,而 state 是在组件内被组件自己管理的,一般在 constructor 中初始化
props 在组件内部是不可修改的,但state 在组件内部可以进行修改,state 是多变的、可以修改

3.super()和super(props)区别

在React 中,类组件基于ES6,所以在 constructor 中必须使用 super在调用 super 过程,无论是否传入 props,React 内部都会将 porps赋值给组件实例porps 属性中如果只调用了 super(),那么 this.props 在super() 和构造函数结束之间仍是undefined

4.说说对react中类组件和函数组件的理解?

1️⃣类组件
通过使用 ES6 类的编写形式来编写组件,该类必须继承 React.Component
如果想要访问父组件传递过来的参数,可通过this.props 的方式去访问,在组件中必须实现render 方法,在return 中返回 React 对象
2️⃣函数组件
通过函数编写的形式去实现一个 React 组件。
函数第一个参数为props用于接收父组件传递过来的参数
3️⃣区别
1.编写形式:一个function,一个class
2.状态管理:
类组件中调用setState,在 hooks 情况下,函数组件调用 state ,则需要创建一个类组件或者 state 提升到父组件中,然后通过props 对象传递到子组件
3.生命周期:
在函数组件中不存在生命周期,生命周期钩子来自于继承的react.Component,函数组件useEffect来对应类组件中的componentDidMount生命周期。useEffect回调函数中return一个函数,则return函数会在组件卸载的时候执行,正如componentWillUnmount
4.调用方式:
函数组件调用则是执行函数
类组件则需要将组件进行实例化,然后调用实例对象的render方法
5.获取渲染值:
类组件中输出this.props.user,this总是可变的,而函数组件本身不存在this
4️⃣总结
两种组件都有各自的优缺点
函数组件语法更短,更简单,而类组件会因大量使用this而让人感到困惑

5.说说对受控组件和非受控组件的理解?应用场景?

受控组件:就是受我们控制的组件,组件的状态全程响应外部数据,受控组件需要初始状态和状态更新事件函数。
非受控组件:初始化接受外部数据,自己在内部存储其自身状态,通过ref查询DOM并查找其当前值。
应用场景:
大部分时候推荐使用受控组件来实现表单
在这里插入图片描述

6.说说react的事件机制?

react基于浏览器的事件机制自身实现了一套事件机制,包括事件注册,事件合成,事件冒泡,事件派发等,在react中这套事件机制被称为合成事件。
react事件机制总结:
React 上注册的事件最终会绑定在document这个 DOM 上,而不是 React 组件对应的 DOM(减少
内存开销就是因为所有的事件都绑定在 document 上,其他节点没有绑定事件)
React 自身实现了一套事件冒泡机制,所以这也就是为什么我们event.stopPropagation()无效的原因。
React 通过队列的形式,从触发的组件向父组件回溯,然后调用他们 JSX 中定义的 callbackReact 有一套自己的合成事件SyntheticEvent

7.react事件绑定的方式有哪些?区别?

绑定方式:
render方法中使用bind
render方法中使用箭头函数
constructor中bind
定义阶段使用箭头函数绑定

区别:
编写方面:方式一、方式二写法简单,方式三的编写过于冗杂;
性能方面:方式一和方式二在每次组件render的时候都会生成新的方法实例,性能问题欠缺。若该函数作为属性值传给子组件的时候,都会导致额外的渲染。而方式三、方式四只会生成一个方法实例;
综合上述,方式四是最优的事件绑定方式。

8.react构建组件的方式有哪些?区别?

构建方式:
函数式创建
通过React.createClass 方法创建
继承 React.Component 创建
区别:
由于React.createclass创建的方式过于冗杂,并不建议使用而像函数式创建和类组件创建的区别主要在于需要创建的组件是否需要为有状态组件:·
对于一些无状态的组件创建,建议使用函数式创建的方式
由于react hooks 的出现,函数式组件创建的组件通过使用 hooks 方法也能使之成为有状态组件,再加上目前推崇函数式编程,所以这里建议都使用函数式的方式来创建组件在考虑组件的选择原则上,能用无状态组件则用无状态组件

9.说说react中引入css的方式有哪几种?区别?

方式:
在组件内直接使用
组件中引入.css 文件
.module.css 文件
css in Js
区别:
在组件内直接使用css该方式编写方便,容易能够根据状态修改样式属性,但是大量的演示编写
在组件内直接使用容易导致代码混乱;
组件中引入.css 文件符合我们日常的编写习惯,但是作用域是全局的,样式之间会层叠引;
引入.module.css 文件能够解决局部作用域问题,但是不方便动态修改样式,需要使用内联的方式进行样式的编写;
通过cssin s 这种方法,可以满足大部分场景的应用,可以类似于预处理器一样样式嵌套、定义修改状态等;
至于使用 react 用哪种方案引入 css ,并没有一个绝对的答案,可以根据各自情况选择合适的方案

10.说说react生命周期有哪些不同阶段?每个阶段对应的方法是?

三个阶段:
创建阶段
constructor
getDerivedStateFromProps
render
componentDidMount
更新阶段
getDerivedStateFromProps
shouldComponentUpdate
render
getSnapshotBeforeUpdate
componentDidUpdate
卸载阶段
componentWillUnmount

11.react中组件之间如何通信?

父组件向子组件传递:
由于react的数据流动为单向的,父组件向子组件传递是最常见的方式,父组件在调用子组件的时候,只需要在子组件标签哪传递参数,子组件通过props属性就能接收父组件传递过来的参数

子组件向父组件传递:
父组件向子组件传一个函数,然后通过这函数的回调,拿到子组件传过来的值

兄弟组件之间的通信:
父组件作为中间层来实现数据的互通,通过使用父组件传递

父组件向后代组件传递:
通过使用react.createContext创建一个context,创建成功后,存在provider组件通过value属性用于给后代组件传递数据,通过consumer组件或者使用contextType属性接收

非关系组件传递:
通过使用redux

总结:
由于 React 是单向数据流,主要思想是组件不会改变接收的数据,只会监听数据的变化,当数据发生变化时它们会使用接收到的新值,而不是去修改已有的值因此,可以看到通信过程中,数据的存储位置都是存放在上级位置中

12.说说对高阶组件的理解?

在react中,高阶组件即接受一个或多个组件作为参数并且返回一个组件,本质就是一个函数,并不是一个组件。
通过对传入的原始组件做一些你想要的操作(比如操作 props,提取 state,给原始组件包裹其他元素等),从而加工出想要的组件把通用的逻辑放在高阶组件中,对组件实现一致的处理,从而实现代码的复用所以,高阶组件的主要功能是封装并分离组件的通用逻辑,让通用逻辑在组件间更好地被复用

使用高阶组件的同时,一般遵循一些约定,如下:
props 保持一致
不能在函数式组件上使用 ref 属性,因为没有实例
不要再render()方法中使用高阶组件
使用 compose 组合高阶组件

应用场景
高阶组件能够提高代码的复用性和灵活性,在实际应用中,常常用于与核心业务无关但又在多个模块使用的功能,如权限控制、日志记录、数据校验、异常处理、统计上报等

13.在react中组件间过渡动画如何实现?

在react 中实现过渡动画效果如:
react-transition-group
react-motion
Animated
原生的CSS

14.说说你在react项目中如何捕获错误的?

错误边界在渲染期间、生命周期方法和整个组件树的构造函数中捕获错误形成错误边界组件的两个条件:
使用了 static getDerivedStateFromError().
使用了 componentDidCatch()

下面这些情况无法捕获到异常:
事件处理
异步代码
服务端渲染
自身抛出来的错误
对于错误边界无法捕获的异常,如事件处理过程中发生问题并不会捕获到,是因为其不会在渲染期间触发,并不会导致渲染时候问题
这种情况可以使用js 的try…catch…语法

15.说说对react里的refs的理解?应用场景?

React 中的Refs 提供了一种方式,允许我们访问DOM 节点或在 render方法中创建的React元素本质为 ReactDOM.render() 返回的组件实例,如果是渲染组件则返回的是组件实例,如果渲染dom 则返回的是具体的dom 节点

使用:
创建ref 的形式有三种:
传入字符串,使用时通过 this.refs传入的字符串的格式获取对应的元素
传入对象,对象是通过 React.createRef()方式创建出来,使用时获取到创建的对象中存在current 属性就是对应的元素
传入函数,该函数会在 DOM 被挂载时进行回调,回调函数参数会传入一个 元素对象,然后通过实例将对象进行保存
传入hook,hook是通过useRef() 方式创建,使用时通过生成hook对象的 current 属性就是对应的元素

应用场景:
对Dom元素的焦点控制、内容选择、控制
对Dom元素的内容设置及媒体播放对Dom元素的操作和对组件实例的操作
集成第三方 DOM 库

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

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

相关文章

爬虫高阶(一):解决验证码及爬取知网论文数据

爬取知网论文数据 解决验证码实现过程代码解决验证码 首先我们必须要识别出验证码,才能让进行下一步。 分享一个好用的网站 云码 接着按照流程操作来得到积分,点击个人中心查看自己的token即可(会用到,一次大约10积分,初始有300免费积分,1元能有1000积分) 实现过程…

[AIGC] MySQL与PostgreSQL事务完整性的对比

事务完整性是数据库管理系统最为重要的特性之一。在简单的术语中,一个事务可以被定义为一个逻辑单元的工作,它一旦被提交,要么全部成功,要么全部失败。这种“全部或无”的特性体现了一个数据库事务的原子性,是保证数据…

Css提高——Css3盒子模型border-box

1、盒子模型的种类与区别 CSS3 中可以通过 box-sizing 来指定盒模型,有2个值:即可指定为 content-box、border-box,这样我们 计算盒子大小的方式就发生了改变。 CSS3 盒子模型 可以分成两种情况: 1. box-sizing: content-box 盒…

ArcGIS Pro与R:携手优化生态系统服务评估流程

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、…

easyExcel 读取excel(按条读取)

MAVEN <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>代码 import com.al…

Python 解析CSV文件 使用Matplotlib绘图

数据存储在CSV文件中&#xff0c;使用Matplotlib实现数据可视化。 CSV文件&#xff1a;comma-separated values&#xff0c;是在文件中存储一系列以‘&#xff0c;’分隔的值。 例如&#xff1a;"0.0","2016-01-03","1","3","20…

电子电工基础-二极管

二极管&#xff1a;单向导电性 工作区域&#xff1a;截止区、放大区、饱和区、反向击穿区 相关计算题 注意点&#xff1a;正向压降为0.7V&#xff0c;但是电流小&#xff0c;可以设为0.6V 在对其进行静态分析 可以得出静态直流的电流大小Id 根据二极管电流为26ma的特性&…

力扣刷题Days23-35.搜索插入的位置(js)

1&#xff0c;题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 2&#xff0c;代码 /*** param {number[]} nums*…

Vue+SpringBoot打造智慧家政系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统&#xff0…

鸿蒙 Launcher与android Launcher的开发区别

鸿蒙&#xff08;HarmonyOS&#xff09;Launcher与Android Launcher在某些方面相似&#xff0c;但也存在一些明显的区别。尽管鸿蒙Launcher和Android Launcher都是用于用户与设备交互的界面&#xff0c;但由于底层架构、生态系统、开发语言和工具等方面的差异&#xff0c;它们在…

2024年亚洲图像处理趋势会议(ATIP 2024)即将召开!

2024年亚洲图像处理趋势会议&#xff08;简称&#xff1a;ATIP 2024&#xff09;将于2024年6月21日至23日在英国伦敦举行。在会议上我们将与相关领域的研究人员和知名专业人士共同讨论关于图像处理学科的最新研究方向及进展&#xff0c;评估当前最先进的技术和未来研究的关键领…

使用el-cascader组件写下拉级联多选并且具有全选功能

样式 说明&#xff1a; 级联选择器中加上全选的按钮&#xff0c; 并且保证数据响应式。 思路 因为是有全选的功能&#xff0c;所以不能直接使用el-cascader组件&#xff0c; 而是选择使用el-select组件&#xff0c; 在此组件内部使用el-cascader-panel级联面板全选按钮也是…

Win11配置WSL(Ubuntu)环境

一&#xff0c;什么是WSL WSL:Windows Subsystem for Linux&#xff0c;是用于Windows系统之上的Linux子系统。作用很简单&#xff0c;可以在Windows系统中获得Linux系统环境&#xff0c;并完全直连计算机硬件&#xff0c;无需通过虚拟机虚拟硬件 简而言之: Windows10的WSL功能…

【Android】图解View事件分发机制

文章目录 View事件分发机制dispartchTouchEvent()dispatchTouchEvent() 方法主要负责什么&#xff1f; onTouchEvent(event) 点击事件分发的传递规则自上而下自下而上 View事件分发机制 View的事件分发机制是Android中非常核心的一个概念&#xff0c;它负责处理触摸事件&#…

【黄金手指】windows操作系统环境下使用jar命令行解压和打包Springboot项目jar包

一、背景 项目中利用maven将Springboot项目打包成生产环境jar包。名为 prod_2024_1.jar。 需求是 修改配置文件中的某些参数值&#xff0c;并重新发布。 二、解压 jar -xvf .\prod_2024_1.jar释义&#xff1a; 这段命令是用于解压缩名为"prod_2024_1.jar"的Java归…

OpenGL学习笔记【2】——开发环境配置(GLFW,VS,Cmake),创建第一个项目

学OpenGL的都会知道&#xff0c;OpenGL只提供了绘图功能&#xff0c;创建窗口是需要自己完成的。这就需要学习相应操作系统的创建窗口方法&#xff0c;为简化创建窗口的过程&#xff0c;可以使用专门的窗口库&#xff0c;例如GLFW。使用GLFW之前需要先进行配置&#xff0c;那怎…

css实现的3D立体视觉效果鸡蛋动画特效

这是一个基于纯css实现的3D立体视觉效果鸡蛋动画特效&#xff0c;喜欢的朋友可以拿来使用演示动态效果 css实现的3D立体视觉效果鸡蛋动画特效

spark RDD 创建及相关算子

RDD编程入口 RDD编程入口对象是SparkContext对象&#xff0c;想要调用相关的计算api都需要通过构造出的sparkcontext对象调用 RDD的创建 通过并行化集合创建RDD&#xff08;本地集合转为分布式&#xff09;&#xff0c;api如下 rdd sc.parrallize(param1, param2)参数1是本…

Linux:点命令source

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 source命令用于读取一个文件的内容并在当前Shell环境&#xff08;包括交互式Shell或是非交互式Shell&#xff09;执行里面的命令。它被称为点命令是因为命令名source也可…

植被参数光学遥感反演方法(Python)及遥感与生态模型数据同化算法

“绿水青山就是金山银山”的生态文明理念现已深入人心&#xff0c;从顶层设计到全面部署&#xff0c;生态文明建设进入举措最实、推进最快、力度最大、成效最好的时期。生态文明评价必须将生态系统健康作为基本内容&#xff0c;而作为生态系统健康评价的重要指标之一——植被参…