概述
- 函数式组件 无状态,react 流
- 状态组件 内部状态管理
强类型
- 强类型趋势,大型项目的构建基础!
- 类型推导开发体验会更好
设计目标
- 开放底层功能
render函数的改造点?
- 更小
- 按需加载,利用
tree shaking来源于 webpack 的设计理念
- 按需加载,利用
- 更快
- 采用
proxy对象替换访问器属性,proxy 实际上属于浏览器底层拦截器,所以效率高于访问器属性
- 采用
- 更易维护
monorepo来源于 babel 的思想,多包系统,分离关注
vdom
依赖追踪粒度
- 属性,存在大量监察对象
- 组件,以视图为粒度
- 节点,更新包含子组件
优化方法:
- 减少运行时监察,在编译时只提取动态需监听的节点进行刷新
- 动态节点的判断条件?
- 模板解析规则?
重点只能对模板进行静态分析,对自定义 render 是无法利用到此优势的, 应为 render 属于运行时绑定无法触发静态分析流程
由于使用 vdom 表征 dom 所以可以实现跨平台适配
函数式
需要看一下 rxjs!!!! 优点无状态
- [ ] 函数式配置相比对象配置的优势?
- 由于对象配置默认结构已知无法 tree-shaking,采用函数方式可以在编译时依据 import ,知晓引入的特性可以利用此技术压缩体积
逻辑复用
- mixin 问题
- 命名空间冲突
- [ ] 为什么要清楚来源?
- [ ] 高阶组件,需学习此概念?
通过暴露函数返回值的方式实现复用,函数式复用!
函数式混入的优势是可自由组合!!你可以定义多个不同的功能集 通过组合实现复用,而混入不具有此特性
hooks
- [ ] 学习 react hooks!!!
vue2 -> vue3
- 采用函数组织视图的模型
- 利用 setup 挂载复用的模型数据, setup 周期早于 beforeCreated
- composition api
- 混入进行复用的问题
- 无法追踪依赖的来源
- 存在命名冲突
- 解决方案
- Hoc ,无法解决依赖来源的问题,存在额外组件包裹问题
- Slots, 存在额外的组件包裹问题
- compositon api,不存在上述问题
- 追踪鼠标滚动的示例
- 实践将基于配置的复杂组件拆分为基于特性的组合,组件是一系列特性的集合,每个单独的特性都可以复用
- 混入进行复用的问题