Vue3中Teleport的实现原理

374 阅读1分钟

前言

  • Vue3新增组件,该组件可以将制定内容渲染到制定容器中。默认内容都是渲染到元素app内,我们可以将其渲染到任意节点(传送门)

示例

Image.png

页面结果

Image.png

实现

Image.png

createVnode里加上teleport的判断

Image.png

走到渲染流程中的patch方法时,进行类型判断

Image.png

  • 把一些应有的属性传给process
  • 另外再传给它挂载子节点的方法和更新子节点的方法

我们现在详细实现teltport上的process方法

  • 如果是初始化,拿到props的to属性
  • 如果有值,调mountChildren方法挂载到target上

Image.png

如果是更新流程

Image.png

我们来处理更新逻辑

  • patch里传一个方法move用来移动节点

Image.png

  • 先更新儿子内容

  • 然后判断teleport中如果更新前后的to不一样,也就是传送的位置发生了变化,就把更新后的孩子放到新的容器中

Image.png

总结

  • 总共就两步,初始挂载逻辑和更新逻辑
  • 更新逻辑中先更新儿子内容,这个时候还是发生在老容器中的,然后判断传送的位置,如果传送的位置发生变化了,就将更新后的内容移动到新的容器中