-
render-div
- 渲染文本div
-
render-children
- 渲染带有子节点的div
-
render-props
- 渲染带有属性的div
-
set-state
- 简单更新,全部重新渲染
-
proxy
- effect的set时触发渲染
-
track-trigger
- effect下的get/track和set/trigger
-
component
- setup返回render结果
-
diff-props
- container->oldVNode->oldEl->oldPros与newProps比较
-
diff-children
- array->string,string->string,string->array,array->array
-
diff-array
- patchKeyedChildren最长上升子序列
- 递归挂载子节点children
- 变量props进行相应处理
- 重新生成Vnode
- 渲染新的Vnode,删除旧的已渲染,重新挂载
- moutn-children分支下的mountChildren参数错误
- proxy的set中重新渲染
- effect注册副作用函数
- reactive的代理中数据变化,再次调用副作用函数
- track注册effect到targetMap
- trigger查找targetMap中的effect并执行
- render()中调用patch()
- patch()中根据type类型进行不同的处理
- Component的setUp()返回的render()可以生成虚拟dom树
- 前面的1.3patchProps实际是renderProps.对props的首次渲染
- 这里的patchProps是props更新后的重新比较渲染
- 实现获取container->oldVNode->oldEl->oldProps,并与newProps比较
- 子节点的比较分为四种
- array->string,string->string,string->array,array->array
- 这里只是简单前3种
- array->string,string->string,先删除旧的array,然后挂载新的string
- string->array 先删除旧的string,再挂载新的array
- patchChildren最后一种array->array
- 这里使用Key作为子节点唯一
- 分为四种情况,
- 删除旧key子节点
- 更新旧key子节点,位置不变
- 新增key子节点
- 更新旧key子节点,移动位置