01面经-React

93 阅读3分钟

React中函数组件和类组件的区别

要点:分析出函数组件和类组件的优劣势,以及实际开发中的使用情况。

  1. 类组件可以定义自己的state,用来保存自己内部状态;在Hooks出现之前函数式组件不可以,因为函数每次调用都会产生新的变量
  2. 类组件有自己的生命周期,我们可以在生命周期中完成逻辑,比如在componentDidMount中添加订阅,在componentWillUnmout中取消订阅等;函数组件在Hooks出现之前,如果在函数组件中发送网络请求,意味着每一次重新渲染都会再发一次网络请求
  3. 类组件可以只在状态改变时重新执行render函数以及我们希望重新调用的生命周期函数;函数式组件在重新渲染时,整个函数都会重新执行,浪费浏览器性能。
  4. 复杂组件变的难以理解,实际开发中类组件很难拆分,写起来逻辑也比较混乱
  5. 组件复用状态很难,比如使用provider、consumer来共享一些组件状态时,如果多次使用consumer,代码会出现多层嵌套难以维护
    函数组件中HOOKS的出现很好地解决了问题,useState可以维护组件内部的状态,useEffect能够完全模拟类组件中的生命周期。

React中类式组件创建的时候用class mycomponent extends React.Component这个命令 ,其中为什么要用extends,继承了React Component中的哪些方法?

  1. 继承React.component的组件生命周期:
    挂载
  • constructor()
  • render()
  • UNSAFE_componentWillMount()
  • componentDidMount()
    更新
  • shouldComponentUpdate()
  • render()
  • componentDidUpdate()
    卸载
  • componentWillUnmout()
    错误处理
  • componentDidCatch()
  1. class属性
  • defaultProps
  • displayname
  1. 实例属性
  • props
  • state
  1. 其他API
  • setState()
  • forceUpdate

类式组件中的this的指向问题是如何去解决的

  1. 通过this来直接调用函数并且返回箭头函数
  2. 包裹一层箭头函数
  3. 通过bind来改变this指向
  4. 通过赋值语句往实例上面添加一个箭头函数
  5. 在构造函数中再创建一个实例方法,和原型方法公用一个函数体

React中的新旧生命周期,函数式组件中如何模拟生命周期,useEffect可以把类似组件中的生命周期函数都模拟出来吗?

生命周期图谱useEffect能够模拟生命周期函数它跟 class 组件中的 componentDidMountcomponentDidUpdate 和 componentWillUnmount 具有相同的用途,只不过被合并成了一个 API。当调用useEffect时,就是告诉react完成DOM更改后执行副作用函数,同时副作用函数用返回值,我们可以在返回中“清楚副作用”。

hooks中setState是同步的还是异步的?如果要获得最新的state该如何获取?

HOOKS中setState是异步的,如果需要获得最新的state可以通过useEffct副作用来进行处理,或者是将值作为参数传递给下一个函数。

React中fiber的原理

fiber是react 16中新的协调引擎,主要目的是使得Virtual DOM可以进行增量式渲染,能将渲染工作分成块并将其分散到多个帧上。(待补充完整)