- KeepAlive
定义KeepAlive组件
- WebAPI
定义渲染器平台的API集合
- diff
定义diff算法
- renderer
定义入口文件
- lifeCycleHooks
定义生命周期方法的添加函数
- patch
定义核心的patch方法
- unmount
定义卸载方法
定义KeepAlive组件
Kind: inner constant of KeepAlive
Title: KeepAlive组件
- 子组件作为slots存在, 是默认的slot
- 缓存子组件节点: cache[vnode.type] = vnode; 使用组件选项对象作为key来缓存,但这种方式只能支持不同组件类型, 同一组件类型无法缓存多个实例,如下例所示
<KeepAlive>
<count v-if="true" />
<count else />
</KeepAlive>
Vue中除了用选项对象来作为key,还使用了vnode.key, 源码key = vnode.key == null ? comp : vnode.key
;
像上述例子,编译器会自动给每个count添加key,而且是从0开始递增的key,除非手动添加key标识
定义渲染器平台的API集合
将class的值归一化为字符串
Kind: inner method of WebAPI
Param | Type | Description |
---|---|---|
value | string | object | Array.<(string|object)> |
class属性值 A@returns {string} 归一化后的字符串值 |
归一化style属性值
Kind: inner method of WebAPI
Returns: object
- 归一化后的style属性值
Param | Type | Description |
---|---|---|
value | Array.<object> | object |
配置的style属性值 |
定义diff算法
- diff
- static
- inner
- ~isReusable(oldNode, newNode) ⇒
boolean
- ~isReusable(oldNode, newNode) ⇒
核心思想: 因为没有key的帮助,无法识别新旧节点列表中,究竟哪些节点是可以复用的,所以依次按照顺序对比patch
Kind: static method of diff
Param | Type | Description |
---|---|---|
n1 | * |
旧的父节点 |
n2 | * |
新的父节点 |
核心思想: 通过key可以在新旧子节点列表中,找到可以复用的节点,从而不必卸载和挂载,通过移动可复用节点即可
Kind: static method of diff
根据key值和node.type来判断两个节点是否可以复用
Kind: inner method of diff
Returns: boolean
- 新旧节点是否可以复用
Param | Type | Description |
---|---|---|
oldNode | * |
旧节点 |
newNode | * |
新节点 |
定义入口文件
根据传入的平台渲染API,创建一个平台渲染器,不传的话默认是web平台渲染器
Kind: static method of renderer
Returns: object
- 渲染器对象
包含render方法
render(vnode, container);
Param | Type | Description |
---|---|---|
renderOptions | object |
平台渲染的API集合 |
定义生命周期方法的添加函数
将传入的实例赋值给当前实例,在组件setup函数调用前,将组件实例传入作为当前实例,这样在setup中注册的生命周期函数会添加到组件实例上,setup调用后释放
Kind: static method of lifeCycleHooks
Param | Type |
---|---|
instance | * |
定义核心的patch方法
- patch
- module.exports(n1, n2, container, anchor, renderOptions) ⇒
undefined
⏏- ~mountElement(vnode, container, anchor, renderOptions) ⇒
undefined
- ~patchElement(n1, n2, renderOptions)
- ~patchChildren(n1, n2, el, renderOptions)
- ~mountComponent(vnode, container, anchor, renderOptions)
- ~patchComponent(n1, n2) ⇒
undefined
- ~resolveProps(options, propsData) ⇒
Array
- ~propsHasChanged(prevProps, nextProps) ⇒
boolean
- ~shallowReadOnly(data) ⇒
object
- ~getAnchor(vnode) ⇒
DOMNode
- ~mountElement(vnode, container, anchor, renderOptions) ⇒
- module.exports(n1, n2, container, anchor, renderOptions) ⇒
挂载/更新节点
Kind: Exported function
Param | Type | Description |
---|---|---|
n1 | * |
旧节点 |
n2 | * |
新节点 |
container | * |
容器 |
anchor | * |
挂载锚点 |
renderOptions | * |
渲染器平台API集合 |
挂载DOM元素类型的节点
Kind: inner method of module.exports
Param | Type | Description |
---|---|---|
vnode | * |
节点 |
container | * |
容器 |
anchor | * |
锚点 |
renderOptions | * |
渲染器平台 |
更新元素类型的节点
Kind: inner method of module.exports
Param | Type | Description |
---|---|---|
n1 | * |
旧节点 |
n2 | * |
新节点 |
renderOptions | * |
渲染器API |
更新新旧节点的子节点
Kind: inner method of module.exports
Param | Type | Description |
---|---|---|
n1 | * |
旧节点 |
n2 | * |
新节点 |
el | * |
容器 |
renderOptions | * |
渲染器API |
组件挂载
Kind: inner method of module.exports
Param | Type | Description |
---|---|---|
vnode | * |
组件节点 |
container | * |
容器 |
anchor | * |
锚点 |
renderOptions | * |
渲染器API |
更新组件
Kind: inner method of module.exports
Param | Type | Description |
---|---|---|
n1 | * |
新节点 |
n2 | * |
旧节点 |
根据组件声明的props,解析实际传入的props值,返回解析后的props和attrs
Kind: inner method of module.exports
Returns: Array
- 返回解析后的props和attrs
Param | Type | Description |
---|---|---|
options | object |
组件的选项对象声明的props |
propsData | object |
实际传入的props |
浅层比较prevProps与nextProps
Kind: inner method of module.exports
Returns: boolean
- prevProps与nextProps浅层比较的结果
Param | Type |
---|---|
prevProps | object |
nextProps | object |
浅层冻结数据
Kind: inner method of module.exports
Param | Type |
---|---|
data | object |
获取当前vnode的锚点(insertBefore的anchor锚点)
Kind: inner method of module.exports
Returns: DOMNode
- 返回DOMNode类型
Param | Type |
---|---|
vnode | * |
定义卸载方法
卸载节点(组件)
Kind: Exported function
Param | Type |
---|---|
vnode | * |
renderOptions | * |