八股文
述说React和Vue的区别
redux主要解决什么问题?有什么优缺点?
如何划分业务组件和技术组件?
React生命周期函数
React性能优化方案有哪些?和哪个周期函数关联性较大?
为什么虚拟dom会提高性能?
DOMDiff算法?
简述flux思想React项目用过什么脚手架?
React解决了什么问题?
React的工作原理?
使用React有何优点?
展示组件(Presentationalcomponent)和容器组件(Containercomponent)之间有何不同?
类组件(Classcomponent)和函数式组件(Functionalcomponent)之间有何不同?
状态(state)和属性(props)之间有何不同?
应该在React组件的何处发起Ajax请求?
在React 中,refs 的作用是什么?
答案: Refs提供了一种访问DOM元素或React元素的方法,这在某些情况下非常有用,例如聚焦输入、测量文本或触发动画。Refs是使用React.createRef()创建的,并通过ref属性附加到React元素上。使用Refs可以访问DOM节点或在组件中存储组件实例。
何为高阶组件(higherordercomponent)?
答案:高阶组件是参数为组件,返回值为新组件的函数。HOC 不会修改传入的组件,也不会使用继承来复制其行为。相反,HOC 通过将组件包装在容器组件中来组成新组件。HOC是React中高级技巧,用来重用组件逻辑。
为什么建议传递给setState的参数是一个callback而不是一个对象?
异步更新:React会将多个setState()调用合并为单个更新,以提高性能。当直接传递个对象时,React可能会对多个setState()调用进行批量处理导致只有最后一个调用生效。而通过传递一个回调函数,可以确保每个setState()都会以当前的状态为基础进行更新。
避免竞态条件(RaceConditions):由于setState()是异步的,多个setState调用可能会导致竟态条件。如果多个setState()调用依赖于先前的状态,并且都是直接传递对象,可能导致不准确的结果。而通过传递一个回调函数,可以确保每个setState()都是基于最新的状态进行操作,避免了竞态条件。
优化性能:通过传递回调函数,可以使用前一个状态作为参数,并返回一个新的状态对象。这样可以避免每次更新都创建一个新的状态对象,从而优化性能和内存使用。
除了在构造函数中绑定this,还有其它方式吗?
答案:使用属性初始化器语法,class 中的方法默认不会绑定this。如果忘记绑定this.handleClick 并把它传入了onClick,那么它将是一个 undefined。
怎么阻止组件的渲染?
答案:
- 利用内联条件渲染来控制组件的渲染,不渲染组件。
- 利用React.Component 实现componentWillMount() 方法,在方法中返回 null 或者 false。
- 利用React.PureComponent 实现 shouldComponentUpdate() 方法,并返回 false。
当渲染一个列表时,何为key?设置key的目的是什么?
答案:
- key是React用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识。
- 简单的说,key应该是唯一的。
- 推荐在循环中使用key,key会传递信息给React,但不会显示出来。
- key应该使用字符串或者数字,也可以使用React元素作为key。
- 通常,使用数据中的唯一标识符作为key。
为什么要设计React hook,它解决了什么问题?
答案:
- 组件之间逻辑复用难。
- 复杂组件变得难以理解。
- 难以理解的class。
- 难以记忆的生命周期。