React三三两两

89 阅读2分钟
1.jsx是如何变成dom元素的

jsx是js语言的一种拓展,它和模版语法很接近,但是它充分的具备js的能力。 jsx会被编译为react.createElement(),ReactCreateElement最终返回reactElement的js对象。 babel主要作用是将js代码进行代码转换。

  1. JXS代码
  2. babel转换
  3. react.createElement调用 二次处理key,ref,self source四个属性值 遍历config,筛选可以提进props里的属性 提取子元素,推入childArray数组 格式化defaultProps
  4. reactElement调用
  5. 虚拟dom
  6. ReactDOM.render()渲染
  7. 真实dom

image.png

react 15生命周期

constructor->componentWillMonut->render->componentDidMount

componentWillreceveProps: props发生改变或者父组件的重新渲染会触发这个生命周期

shouldComponentUpdate: 引申出pureComponent的概念

react组件化的设计思想

  • 封闭性 渲染工作流程封闭,各个组件的渲染流相互独立
  • 开发性:单一数据流的形式,通过props组件之间传递数据

render是react的灵魂,串联整个组件系统的数据流和渲染工作流 生命周期是躯干:串连整个react的行动轨迹

react 16

废弃了componentWillMount,新增了getDerivedStateProps

react引入fiber的原因
  • 规范开发者开发习惯,减少在will阶段尽心的读写dom,异步请求等
  • 解决在一次setState阶段耗时过程带来的交互的⬆上的卡顿,优化用户体验
  • 干掉了部分will阶段的生命周期,
  • 更新渲染的生命周期分为render 阶段 和commit 阶段
  • render可以被打断,打断时候,维护链表记录子节点和兄弟节点的信息
  • 将一次大的更新拆成很多小的任务,及时让出cpu的控制权
基于props的单向数据流

父子组件的通信 class->this.props 函数组件->入参

react Hooks

image.png

1.告别难以理解的class 2.解决业务逻辑难以拆分的问题 3.使状态逻辑服用变得简单可行 4.从设计思想上来说更符合react的理念