您现在的位置是:亿华云 > 系统运维
面试官:说说你在使用React 过程中遇到的常见问题?解决方案?
亿华云2025-10-09 01:25:12【系统运维】4人已围观
简介本文转载自微信公众号「JS每日一题」,作者灰灰。转载本文请联系JS每日一题公众号。一、前言在使用react开发项目过程中,每个人或多或少都会遇到一些"奇怪"的问题,本质上都是我们对其理解的不够透彻re
本文转载自微信公众号「JS每日一题」,面试作者灰灰。官说过程转载本文请联系JS每日一题公众号。说使
一、中遇前言
在使用react开发项目过程中,问题每个人或多或少都会遇到一些"奇怪"的解决问题,本质上都是面试我们对其理解的不够透彻
react 系列,33个工作日,官说过程33次凌晨还在亮起的说使台灯,到今天就圆满画上句号了,中遇比心
在系列中我们列出了很多比较经典的问题考题,工作中遇到的解决问题也往往就藏中其中,只是面试以不同的表现形式存在罢了
今天的题解不算题解,准确来说是官说过程对整个系列的一次贯穿,总结
目录:
react 有什么特性 生命周期有哪些不同阶段?说使每个阶段对应的方法是? state 和 props有什么区别? super()和super(props)有什么区别? setState执行机制? React的事件机制? 事件绑定的方式有哪些? 构建组件的方式有哪些?区别? 组件之间如何通信? key有什么作用? refs 的理解?应用场景? Hooks的理解?解决了什么问题? 如何引入css? redux工作原理? redux中间件有哪些? react-router组件有哪些? render触发时机? 如何减少render? JSX转化DOM过程? 性能优化手段有哪些 如何做服务端渲染?react 有什么特性
主要的特性分为:
JSX语法 单向数据绑定 虚拟DOM 声明式编程 Component借助这些特性,b2b供应网react整体使用起来更加简单高效,组件式开发提高了代码的复用率
生命周期有哪些不同阶段?每个阶段对应的方法是?主要分成了新的生命周期和旧的生命周期:
新版生命周期整体流程如下图所示:
旧的生命周期流程图如下:
state 和 props有什么区别?
两者相同点:
两者都是 JavaScript 对象 两者都是用于保存信息 props 和 state 都能触发渲染更新区别:
props 是外部传递给组件的,而 state 是在组件内被组件自己管理的,一般在 constructor 中初始化 props 在组件内部是不可修改的,但 state 在组件内部可以进行修改 state 是多变的、可以修改super()和super(props)有什么区别?
在React中,类组件基于ES6,所以在constructor中必须使用super
在调用super过程,无论是否传入props,React内部都会将porps赋值给组件实例porps属性中
如果只调用了super(),那么this.props在super()和构造函数结束之间仍是undefined
setState执行机制?
在react类组件的状态需要通过setState进行更改,在不同场景下对应不同的执行顺序:
在组件生命周期或React合成事件中,setState是香港云服务器异步
在setTimeout或者原生dom事件中,setState是同步
当我们批量更改state的值的时候,react内部会将其进行覆盖,只取最后一次的执行结果
当需要下一个state依赖当前state的时候,则可以在setState中传递一个回调函数进行下次更新
React的事件机制?
React基于浏览器的事件机制自身实现了一套事件机制,包括事件注册、事件的合成、事件冒泡、事件派发等
组件注册的事件最终会绑定在document这个 DOM上,而不是 React组件对应的 DOM,从而节省内存开销
自身实现了一套事件冒泡机制,阻止不同时间段的冒泡行为,需要对应使用不同的方法
事件绑定的方式有哪些?
react常见的绑定方式有如下:
render方法中使用bind render方法中使用箭头函数 constructor中bind 定义阶段使用箭头函数绑定前两种方式在每次组件render的时候都会生成新的方法实例,性能问题欠缺
构建组件的方式有哪些?区别?
组件的创建主要分成了三种方式:
函数式创建 继承 React.Component 创建 通过 React.createClass 方法创建如今一般都是b2b信息网前两种方式,对于一些无状态的组件创建,建议使用函数式创建的方式,再比如hooks的机制下,函数式组件能做类组件对应的事情,所以建议都使用函数式的方式来创建组件
组件之间如何通信?
组件间通信可以通过props、传递回调函数、context、redux等形式进行组件之间通讯
key有什么作用?
使用key是react性能优化的手段,在一系列数据最前面插入元素,如果没有key的值,则所有的元素都需要进行更换,而有key的情况只需要将最新元素插入到前面,不涉及删除操作
在使用key的时候应保证:
key 应该是唯一的 key不要使用随机值(随机数在下一次 render 时,会重新生成一个数字) 避免使用 index 作为 keyrefs 的理解?应用场景?
Refs允许我们访问 DOM节点或在 render方法中创建的 React元素
下面的场景使用refs非常有用:
对Dom元素的焦点控制、内容选择、控制 对Dom元素的内容设置及媒体播放 对Dom元素的操作和对组件实例的操作 集成第三方 DOM 库Hooks的理解?解决了什么问题?
Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性
解决问题如下:
难以重用和共享组件中的与状态相关的逻辑 逻辑复杂的组件难以开发与维护,当我们的组件需要处理多个互不相关的 local state 时,每个生命周期函数中可能会包含着各种互不相关的逻辑在里面 类组件中的this增加学习成本,类组件在基于现有工具的优化上存在些许问题 由于业务变动,函数组件不得不改为类组件等等如何引入css?
常见的CSS引入方式有以下:
在组件内直接使用 组件中引入 .css 文件 组件中引入 .module.css 文件 CSS in JS组件内直接使用css会导致大量的代码,而文件中直接引入css文件是全局作用域,发生层叠
引入.module.css文件能够解决局部作用域问题,但是不方便动态修改样式,需要使用内联的方式进行样式的编写
css in js这种方法,可以满足大部分场景的应用,可以类似于预处理器一样样式嵌套、定义、修改状态等
redux工作原理?
redux要求我们把数据都放在 store公共存储空间
一个组件改变了 store 里的数据内容,其他组件就能感知到 store的变化,再来取数据,从而间接的实现了这些数据传递的功能
工作流程图如下所示:
redux中间件有哪些?
市面上有很多优秀的redux中间件,如:
redux-thunk:用于异步操作 redux-logger:用于日志记录react-router组件有哪些?
常见的组件有:
BrowserRouter、HashRouter Route Link、NavLink switch redirectrender触发时机?
在React 中,类组件只要执行了 setState 方法,就一定会触发 render 函数执行
函数组件useState 会判断当前值有无发生改变确定是否执行render方法,一旦父组件发生渲染,子组件也会渲染
如何减少render?
父组件渲染导致子组件渲染,子组件并没有发生任何改变,这时候就可以从避免无谓的渲染,具体实现的方式有如下:
shouldComponentUpdate PureComponent React.memoJSX转化DOM过程?
jsx首先会转化成React.createElement这种形式,React.createElement作用是生成一个虚拟Dom对象,然后会通过ReactDOM.render进行渲染成真实DOM
性能优化手段有哪些
除了减少render的渲染之外,还可以通过以下手段进行优化:
除此之外, 常见性能优化常见的手段有如下:
避免使用内联函数 使用 React Fragments 避免额外标记 使用 Immutable 懒加载组件 事件绑定方式 服务端渲染如何做服务端渲染?
node server 接收客户端请求,得到当前的请求url 路径,然后在已有的路由表内查找到对应的组件,拿到需要请求的数据,将数据作为 props、context或者store 形式传入组件
然后基于 react 内置的服务端渲染方法 renderToString()把组件渲染为 html字符串在把最终的 html进行输出前需要将数据注入到浏览器端
浏览器开始进行渲染和节点对比,然后执行完成组件内事件绑定和一些交互,浏览器重用了服务端输出的 html 节点,整个流程结束
到这里,整个React系列也就结束了,如果这个系列有给你带来一些启发或者帮助,可以点点下方的赞告诉我们,我们下个系列再见
很赞哦!(656)
相关文章
- 互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
- 互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
- 第三,.cc域名域名也有很多优势资源域名,从整体注册基数也可以由此推断;
- 国内域名
- 网站页面结构改版,仅是页面样式发生变化,不会对排名、收录有影响;只有涉及到页面URL改变,才会对网站排名、收录有影响。
- 第三,.cc域名域名也有很多优势资源域名,从整体注册基数也可以由此推断;
- 其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。
- 评估域名涉及的行业规模与发展状况成正比。
- 换新域名(重新来过)
- 换新域名(重新来过)
热门文章
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
- Status、Creation Date、Expiration Date
- 这个不用多说,不同平台的注册价格不同,且不同平台对域名释放交易的把控与曝光不同,当然价格相对便宜且平台渠道广操作便利的平台最好。
站长推荐
为什么说注册域名注意细节?哪些我们不能忽视?
四、配置网站,填充内容
tk域名是什么域名?新手对tk域名有什么看法?
并非一个好米任何人都会给你一个好的价格。那你该如何用以有的好米卖出最理想的价格呢?
用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
打开https://www.aizhan.com/输入自己想要查询的域名然后按回车键,如果做过网站都会有数据显示出来