- 安装typescript - yarn add typescript --dev - npx tsc --init 添加配置文件
- 安装jest - yarn add jest @types/jest --dev - "types": ["jest"] 添加tsconfig配置
- 安装babel - yarn add --dev babel-jest @babel/core @babel/preset-env - yarn add --dev @babel/preset-typescript
- 配置babel.config.js
- 添加 lib
- reactive 的get, set代理
- effect 的自执行,以及track,trigger的依赖收集
- stop时删除依赖
- 添加active与onStop
- 重构get,set逻辑--baseHandler
- 测试中使用jest.fn
- 优化get(track), set(trigger)逻辑
- 创建RefImpl类,实现value取值
- 重构track, trigger,抽离逻辑
- 进行ref的object对比,完成reactive嵌套
- get时无需取value,如template与setup值的联系
- set时当值为ref直接替换
- 新建ComputedRefImpl类
- 添加_dirty参数实现缓存功能
- 调用ReactiveEffect实现getter响应式
- 通过scheduler功能实现_dirty更新
- mount
- createVNode 创建vnode
- render(vnode, rootContainer)
- patch -> processComponent -> mountComponent
- createComponentInstance
- setupComponent(instance) -> initProps/initSlots
- setupStatefulComponent
- handleSetupResult
- finishComponentSetup
- setupRenderEffect -> subTree = instance.render
- patch(subTree, container)
- 引入rollup,配置rollup.config.js
- 解析typescript @rollup/plugin-typescript
- 修改package人口文件
- patch -> processElement -> mountELement
- createElement
- patchProp
- mountChildren
- setupState代理
- $el代理
- publicPropertiesMap代理对象
- 增加ShapeFlags枚举项
- 通过位运算计算vnode的shapeFlag
- 组件注册emit函数
- 驼峰命名转化
- 增加slot选项
- 实现数组形式插槽
- 实现对象形式插槽
- 实现具名插槽
- 实现作用域插槽
- 实例获取,组件增加provides选项
- 默认获取父组件provides
- 初始化,断原型链
- inject默认值处理
- 重构renderer,实现接口封装
- 实现自定义渲染器
- 基于PIXI.js实现canvas渲染
- 使用proxyRefs代理setupResult
- 采用effect进行依赖收集与更新
- Text -> Text
- Text -> Array
- Array -> Text
- 双端对比
- Array -> Array
- 最长递增子序列
- 更新组件props
- 调用组件render函数
- shouldUpdateComponent