react 简介

113 阅读2分钟
优点
  • 开发团队强大,社区强大
  • api简洁且更新区别不大
  • 声明式和组件化编码
缺点
  • 没有官方解决方案,不向像vue有官方全家桶,react只有社区维护
  • 过于灵活,比如新手会在公共方法中setstate
jsx
  • 意义:实现声明式,只写js即可,是react.createElement的语法糖

  • 优点:

    • 高内聚底耦合 vue也有。 方便重用
    • 相对于vue angular不引入新的概念只写js

通过babel 生成AST abstract syntax tree 抽象树转换为es5语法

classic模式:需引入React,不适用时在eslient中会报错,用的react.createElement

Auto模式:自动引入jsx包,react17版本

  • AST 是描述语法
  • vnode是描述页面样式
// AST
// 简单函数
function square(n) {
    return n * n;
}
 
// 转换后的AST
{
   type: "FunctionDeclaration",
   id: {
       type: "Identifier",
       name: "square"
   },
   params: [
      {
           type: "Identifier",
           name: "n"
      }
   ],
   ...
}


props.children——null|string|number |react元素

ts reactNode包含 reactElement

createElement返回js对象,虚拟dom,可供跨平台展示

{ $$typeof 标识符 type key props }

虚拟dom优点
处理了兼容性的问题,例如事件绑定,避免操作真实dom

内容进行了xss防范攻击

跨平台使用

初次渲染不快,更新少量可精准定量更新
缺点
消耗额外内存,首次渲染不会更快

async的执行是加载完成就会去执行,而不像defer那样要等待所有的脚本加载完后按照顺序执行

小顶堆:

因为堆的性质是维护一个最值在堆顶,所以每次堆顶任务(对应任务数组中的第一个元素)就是当前任务队列中优先级最高的任务,这样只需要每次获取堆顶任务执行即可。

堆顶任务取出之后,只需要对小顶堆进行弹堆操作后自上向下的平衡调整,则堆顶又维护了当前任务队列中优先级最高的任务。

这样通过堆维护任务队列,每次获取优先级最高的任务的时间复杂度是 O(1) 的,插入和弹出操作后的平衡调整时间复杂度是 O(logn)的,整体是非常高效的。

html-webpack-pulgin 会自动把打包好的js文件以defer的方式引入

react全家桶 dva umi 小顶堆