react 进阶学习周总结 1

164 阅读2分钟
  1. jsx的本质是什么?它和js之间到底有什么关系? 为什么要用jsx语法?

它其实就是一个js对象 ,用来描述dom结构。 jsx 在编译过程会被babel转换成 -> React.createElement(type,config,children)。 主要是因为转换时间长,把它提到编译过程而不是运行过程,提高性能。

为什么用jsx语法,也可以直接写js对象,只不过可读性很差。 声明式 和命令式 。

过程 : jsx ->babel-> React.createElement -> React.reactElement -> 虚拟dom->传入 ReactDom.render() ->(渲染) 真实dom

  1. 为什么react 16 要更改组件的生命周期?

react 15 的生命周期:

7778b4b11c7eb690fa646e45b2842eb.png

注意这里的componentWillReceiveProps 方法 父组件只要更新了他就会触发。 即使props没有发生变化,也会触发当前方法。

shouldComponentUpdate 组件更新 由组件自身触发。 返回true ,false 用来判断是否需要后续操作。

componentWillComponent 无用,鸡肋,而且容易滥用。

getDerivedStateFromProps 只有一个作用,用Props更新state. 他是一个静态方法。没有this。 需要一个对象格式返回值。

  1. Fiber 架构。

Fiber会把同步渲染变成异步。

render 阶段可以被打断。commit

fdf1178a9a7e6981e5cb1f06846c492.png

commit 阶段同步执行 ,render阶段可以被打断。

注意 render阶段允许暂停 , 中断 , 重启。 而不是只是重新执行。

所以 生命周期可能重复执行。

componentWillMount componentWillUpdate componentWillReceiveProps。

这些生命周期很容易被打断,反复执行。 假如是一个pay支付接口,会产生灾难性的风险。

总之,改造生命周期是为了firber架构带来的异步渲染组件做铺垫。

  1. 数据是如何在React 组件之间传递的?

单向数据流 。 prop 由高到低。 父传子 使用函数. 跨组件通信。 redux

createContext -> (provider -consumer) 。

context API 不能取代 redux

  1. react-hooks

类组件和函数组件 的根本区别。

1.他的心智模型不同, 一个有this ,一个没有 。 2.类组件更加笨重。 学习成本高。生命周期。 this指向。 3.函数组件更加方便复用。 4.类组件可以用高阶组件等解决复用问题,但是很容易造成嵌套地狱不易于维护。 5. hooks 更加轻量 。摒弃了生命周期的概念,而是把一些关联变化的副作用统一到函数里管理。