Skip to the content.

一、diff算法

  1. render方法返回的是虚拟dom(轻量级的js对象),react使用虚拟dom来计算ui更新需要的最小的dom操作
  2. 对于虚拟dom树进行同层对比,算法复杂度从O(n3)降到O(n)(层次遍历)
  3. 子组件列表设置key来找到更精准的对应关系
  4. 比较组件类别而非具体的标签名称

三部分:

  1. tree diff
  2. component diff
  3. element diff

二、 事件代理:在根结点上绑定事件监听器

  1. 实现完全兼容w3c标准的事件体系,告别ie8的bug
  2. dom节点添加事件耗时且占内存,整体的事件代理就是为了解决这个问题
  3. 实现:每个组件都只有一个根结点,根结点有唯一id,所以可以很轻易获取到节点的所有祖先的id,这些id连起来变成一个key,然后把事件通过key存在map中
  4. 浏览器每一次监听的回调都创建一个新的event对象

三、绘制

  1. 批量操作,组件调用时setState时被标记为dirty,事件轮询结束时,React会查找dirty组件并将其重新绘制
  2. 子树重绘组件的setState方法被调用时,组件会重新构建他的子节点(也就是渲染函数重新运行)奥义:将UI改变控制在用户交互触发的区域
  3. shouldComponentUpdate控制组件是否重绘