前言
- Vue3新增组件,该组件可以将制定内容渲染到制定容器中。默认内容都是渲染到元素app内,我们可以将其渲染到任意节点(传送门)
示例
页面结果
实现
createVnode里加上teleport的判断
走到渲染流程中的patch方法时,进行类型判断
- 把一些应有的属性传给process
- 另外再传给它挂载子节点的方法和更新子节点的方法
我们现在详细实现teltport上的process方法
- 如果是初始化,拿到props的to属性
- 如果有值,调mountChildren方法挂载到target上
如果是更新流程
我们来处理更新逻辑
- patch里传一个方法move用来移动节点
-
先更新儿子内容
-
然后判断teleport中如果更新前后的to不一样,也就是传送的位置发生了变化,就把更新后的孩子放到新的容器中
总结
- 总共就两步,初始挂载逻辑和更新逻辑
- 更新逻辑中先更新儿子内容,这个时候还是发生在老容器中的,然后判断传送的位置,如果传送的位置发生变化了,就将更新后的内容移动到新的容器中