千锋教育web前端高频面试题视频教程,kerwin大话前端面试秘籍(附答案)

react高频面试题
- 类组件和函数式组件的区别
- 语法上:函数式组件返回一个jsx元素,类组件是Es6语法糖class,继承component这个类
- 类组件有生命周期,函数式组件没有生命周期,借用useEffect模拟生命周期
- 类组件通过state 和setstate进行状态管理,函数组件使用useState
- 类组件能够捕获到最新的值,this可以获取到最新的props参数保存在内存当中,函数式组件是通过闭包来构建的,无法从外面访问到,也无法在外面修改。
2.react事件绑定的原理
给document加对应的函数,创建listenerBank,
触发时调用调用分发函数dispatchEvent,把d当前对应的所有回调函数都加到listenerBank中,在listenerBank根据key值查找事件回调并合成到event中
最后进行批处理,按照冒泡排序来的
3.setState缺点
异步更新:在调用setState时不会立即更新,会先进行合并再更新,为了提高性能。
重复渲染:多次调用setState会重新渲染考虑使用useReducer或其他状态管理库
性能问题:setState会重新渲染整个组件,即时只修改了部分状态,使用react.memo进行优化。
setState每次传入的是一个新的状态对象,不是直接修改原来的状态,大量数据时修改时,会有一定的开销。
由于setState是一步的机制,在修改时依赖state,一般会使用回调函数作为参数更新state值
4.state和props的区别
props是外部传过来的数据,父传子不可以在组件内部修改,要通过父组件修改
state是内部的状态可以通过setState修改
5.虚拟dom的优劣,实现原理
虚拟dom是js对象模拟的dom树,相当于利用diff算法避免不必要的更新,一次性修改需要更改的部分,首次渲染慢,
虚拟dom的组成:type:元素的类型可以是原生的html也可以是自定义的组件,key:虚拟dom唯一的标识,ref:访问原生的Dom节点
props:属性
6.diff算法key
tree diff 同层级比较
component diff 通过id同组件对比
element diff 同元素对比
7.react组件通信如何实现
父传子props
子传父回调函数+props
Context上下文
redux状态管理action 改变state
8.react 中的refs的作用
ref获取到实例和Dom元素