react面试题大全三

简介: react面试题大全三

1. Vue组件通信?

组件间的通信方式可以分为

父子组件间的通信,
兄弟组件间的通信,
祖孙与后代之间的通信,
非关系组件间的通信

vue常见的通信

1.通过props传递(父组件传递数据给子组件,子组件设置props属性,定义接收父组件传递过来的参数,父组件在使用子组件标签中通过自变量来传递值。)

2.通过 $emit触发自定义事件。(适用于子组件传递数据给父组件。

子组件通过 e m i t 触发自定义事件, emit触发自定义事件,emit触发自定义事件,emit第二个参数为传递的数值,父组件绑定监听器获取到子组件传递过来的参数。)

3.使用ref(父组件在使用子组件的时候设置ref ,父组件通过设置子组件ref来获取数据。)

4.eventBus(适用于兄弟组件传值。创建一个中央事件总线eventBus,兄弟组件通过$emit触发自定义事件, e m i t 第二个人参数为传递的数值,另一个兄弟组件通过 emit第二个人参数为传递的数值,另一个兄弟组件通过emit第二个人参数为传递的数值,另一个兄弟组件通过on监听自定义事件。)

5. p a r e n t 或 parent或parentroot(通过共同的祖辈 p a r e n t 或者 parent或者parent或者root搭建通信桥梁,)

6.vux(适用于复杂瓜西的组件数据传递。vuex作用相当于一个用来存储共享变量的容器)

2. 说说你对vuex的理解?写出其原理的核心代码?

vuex由State + Muatations(commit) + Actions(dispatch) 组成:

(1)全局只有一个Store实例(单一数据源);

(2)Mutations必须是同步事务,不同步修改的话,会很难调试,不知道改变什么时候发生,也很难确定先后顺序。

(3)Actions负责处理异步事务,然后在异步回调中触发一个或多个mutations,也可以在业务代码中处理异步事务,然后在回调中同样操作;

(4)模块化通过module方式来处理,这个跟Redux-combineReducer类似,在应用中可以通过namespaceHelper来简化使用;

3. 说说React生命周期中有哪些坑?如何避免?

  • getDerivedStateFromProps 容易编写反模式代码,使受控组件和非受控组件区分模糊
  • componentWillMount 在 React中已被标记弃用,不推荐使用,主要的原因是因为新的异步架构会导致它被多次调用,所以网络请求以及事件绑定应该放到componentDidMount 中
  • componentWillReceiveProps 同样也被标记弃用,被 getDerivedStateFromProps
    所取代,主要原因是性能问题。
  • shouldComponentUpdate 通过返回 true 或者 false 来确定是否需要触发新的渲染。主要用于性能优化。
  • componentWillUpdate 同样是由于新的异步渲染机制,而被标记废弃,不推荐使用,原先的逻辑可结合
    getSnapshotBeforeUpdate 与 componentDidUpdate 改造使用。
  • 如果在 componentWillUnmount 函数中忘记解除事件绑定,取消定时器等清理操作,容易引发 bug。
  • 如果没有添加错误边界处理,当渲染发生异常时,用户将会看到一个无法操作的白屏,所以一定要添加。

4. 说说你对React中虚拟dom的理解?

Virtual dom 本质上是以对象的形式存在的,对dom的描述,创建虚拟dom,目的就是为了更好的将虚拟dom的节点渲染到页面视图中去,虚拟dom对象的节点与真实dom的属性一一照应。在react中jsx是其一大特性,可以让你在js中通过xml的方式去直接声明界面的dom结构。reactDom.render()用于将创建好的虚拟dom节点插入到某个真实的节点上,并渲染到页面上,jsx实际上是一种语法糖,在使用的过程中会被babel进行编译转化成js代码,所以jsx就是为了简化直接调用react。createelement()方法。

虚拟dom特点:

简单方便:如果使用手动操作真实dom来完成页面,繁琐又容易出错,在大规模应用下维护也很困难。

性能方面:使用虚拟dom,能够有效的避免真实dom树频繁更新,减少多次引起重绘与回流,提高性能。

跨平台:react借助虚拟dom,能够有效的避免真实dom树频繁更新,减少多次引起重绘与回流,提高性能。

但是在一些性能要求极高的应用中虚拟dom无法进行针对性的极致优化。

5. 调和阶段setState干了什么?

代码中调和setstate函数之后,react会将传入的参数对象与组件当前的状态进行合并,然后出发调和过程。

经过调和过程,react会以相对高效的方式根据新的状态构建react元素树,并且着手重新渲染整个ul界面。

在react得到元素树之后,react会自动计算出新的树和老鼠的节点差异,然后根据差异对界面进行最小化重新渲染。

在差异计算算法中,react能够相对精确的知道哪些位置发生了改变以及如何改变,这就保证了按需更新,而不是全部重新渲染。

6. React组件之间如何通信?

父组件向子组件传递:父组件调用子组件的时候,只需要在子组件的标签内传递参数,子组件通过props属性就能接收到父组件传递过来的参数。

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

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

非关系组件传递:如果组件之间类型比较复杂,可以将数据进行一个全局资源管理redux,从而实现通信。

7. 说说redux的实现原理是什么,写出其原理的核心代码?

redux遵循三大原则:单一数据源,state是只读的,使用纯函数来执行修改。

redux要求外面把数据都放在store公共存储空间中,一个组件改变了store里的数据内容,其他组件就能感知到store的变化,再来取数据,从而间接实现了这些数据传递的功能。

实现原理:

react components需要获取一些数据,然后它就告知store需要获取数据,这就是action creactor,store接收到之后,取reducer查一下,reducer就会告诉store应该给这个组件什么数据。

核心代码

import { createStore } from 'redux' // 引入一个第三方的方法
const store = createStore() // 创建数据的公共存储区域(管理员)
// 设置默认值
const initialState = {
  counter: 0
}
const reducer = (state = initialState, action) => {
}
const store = createStore(reducer)

8. 说说Connect组件的原理是什么?

connect 的第一个参数是 mapStateToProps

这个函数允许我们将 store 中的数据作为 props 绑定到组件上

connect 的第二个参数是 mapDispatchToProps

由于更改数据必须要触发action, 因此在这里的主要功能是将 action 作为props 绑定到 组件上

Provider就是react-redux中的一个组件, Provider 做的事情也简单, 它就是一个容器组件, 会把嵌套的内容原封不动作为自己的子组件渲染出来. 它还会把外界传给它的 props.store 放到 context。

9. 说说react 中jsx语法糖的本质?

React 使用 JSX 来替代常规的JavaScript。

JSX 是按照 XML 语法规范 的 JavaScript 语法扩展。

JSX 语法的本质:并不是直接把 JSX 渲染到页面上,而是内部先转换成了 createElement 形式,再渲染的。所有的jsx语法都会最终经过babel.js转化成为React.createElement这个函数的函数调用。

jsx特点:

1.JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化;

2.它是类型安全的,在编译过程中就能发现错误;

3.使用 JSX 编写模板更加简单快速。

10. 说说你对redux中间件的理解?常用的中间件有哪些?实现原理?

中间件(Middleware)是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的

Redux整个工作流程,当action发出之后,reducer立即算出state,整个过程是一个同步的操作

那么如果需要支持异步操作,或者支持错误处理、日志监控,这个过程就可以用上中间件

Redux中,中间件就是放在就是在dispatch过程,在分发action进行拦截处理。

常用的中间件

redux-thunk:用于异步操作

redux-logger:用于日志记录。

redux-thunk是官网推荐的异步处理中间件,action需要是一个JavaScript的对象

redux-thunk中间件会判断你当前传进来的数据类型,如果是一个函数,将会给函数传入参数值(dispatch,getState),dispatch函数用于我们之后再次派发action

getState函数考虑到我们之后的一些操作需要依赖原来的状态,用于让我们可以获取之前的一些状态

11. props和state相同点和不同点?render方法在哪些情况下会执行?

state

一个组件的显示形态可以由数据状态和外部参数所决定,而数据状态就是 state,
一般在 constructor 中初始化,当需要修改里面的值的状态需要通过调用 setState 来改变,
从而达到更新组件内部数据的作用,并且重新调用组件 render 方法。

props

React 的核心思想就是组件化思想,页面会被切分成一些独立的、可复用的组件
组件从概念上看就是一个函数,可以接受一个参数作为输入值,这个参数就是 props,
所以可以把 props 理解为从外部传入组件内部的数
react 具有单向数据流的特性,所以他的主要作用是从父组件向子组件中传递数据
props 除了可以传字符串,数字,还可以传递对象,数组甚至是回调函数。

区别

相同点

两者都是 JavaScript 对象

两者都是用于保存信息

props 和 state 都能触发渲染更新

区别

props 是外部传递给组件的,而 state 是在组件内被组件自己管理的,一般在 constructor 中初始化

props 在组件内部是不可修改的,但 state 在组件内部可以进行修改

state 是多变的、可以修改

12. react新出来两个钩子函数是什么?和删掉的will系列有什么区别?

react废弃的生命周期有:componentwillmount ,componentwillreceiveprops。

废弃原因:在react的fiber架构中,调和过程会多次执行will周期,不再是一次执行,失去了原有的意义。多次执行在周期中如果setstate或者dom操作,会触发多次重绘,影响性能,也会导致数据错乱。

新增的生命周期有:个体derivedstatefrompros,getsnapshotBeforupdate,

getDerivedstatefromprops:在react16.4中,每次则改为每次组件渲染器调用,即无论props变化,组件自己setstate,父组件render都会触发静态方法,本意是隔离访问组件实例,却造成访问组件的数据和方法十分不便,难以进行数据的比较,不能state,而是返回一个对象来更新setstate,使用不便,也可能触发多次更新状态,当组件实例化的时候,这个方法替代了componentwiillmount(),而当接收到新的props的时候,该方法替代了componentwillreceiveProps()和componentWillupdate()。

13. CDN的特点及意义?

CDN详解:

CDN,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。

CDN的作用:

实际上,内容分发布网络(CDN)是一种新型的网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。

CDN的特点:

1、CDN网站加速 提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性

2、镜像服务 消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。

3、远程加速 远程访问用户根据DNS负载均衡技术 智能自动选择Cache服务器,选择的Cache服务器,加快远程访问的速度

4、带宽优化 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。

5、集群抗攻击 广泛分布的CDN节点加上节点之间的智能冗于机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量。

14. 什么是闭包,应用场景是什么?

意义

闭包让你可以在一个内层函数中访问到其外层函数的作用域。

使用场景

- 创建私有变量
- 延长变量的生命周期

注意:如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。


相关文章
|
2月前
|
JSON 缓存 前端开发
【React】React原理面试题集锦
本文集合一些React的原理面试题,方便读者以后面试查漏补缺。作者给出自认为可以让面试官满意的简易答案,如果想要了解更深刻,可以点击链接查看对应的详细博文。在此对链接中的博文作者非常感谢🙏。
36 0
|
4月前
|
前端开发 JavaScript
【第41期】一文入围React面试
【第41期】一文入围React面试
35 0
|
4月前
|
缓存 前端开发 JavaScript
【面试题】金九银十,你准备好面试了吗? (30w字前端面试题总结)( React)
【面试题】金九银十,你准备好面试了吗? (30w字前端面试题总结)( React)
|
2月前
|
存储 缓存 前端开发
【React】Hooks面试题集锦
本文集合一些React的Hooks面试题,方便读者以后面试查漏补缺。作者给出自认为可以让面试官满意的简易答案,如果想要了解更深刻,可以点击链接查看对应的详细博文。在此对链接中的博文作者非常感谢🙏。
53 1
|
4月前
|
缓存 前端开发 JavaScript
React 面试题2
React 面试题2
|
4月前
|
缓存 前端开发 JavaScript
React 面试题
React 面试题
115 0
|
5月前
|
JavaScript 前端开发
【金典面试题】Vue与React实现Tree
【金典面试题】Vue与React实现Tree
37 0
|
7月前
|
JavaScript 前端开发
React-组件state面试题
React-组件state面试题
33 0
|
26天前
|
存储 安全 Java
大厂面试题详解:java中有哪些类型的锁
字节跳动大厂面试题详解:java中有哪些类型的锁
51 0
|
11天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
38 1