优点
- 开发团队强大,社区强大
- 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 小顶堆