Vue3读源码 3

这篇主要读vue编译vdom,vnode的一些准备函数,整个vue就是在写函数,和有限个对象。废话不多说。

可以看到这是一批创造表达式的函数,拿其中一个出来看一下

function createRoot(children, loc = locStub) {
      return {                   // 返回一个对象
          type: 0 /* ROOT */,    // 类型,标识前面有定义
          children,              // 孩子,有的话就要递归
          helpers: [],           // 记录运行时需要的辅助的程序的数组
          components: [],        // 组件
          directives: [],        // 指令
          hoists: [],            // 提升钩子
          imports: [],           // 引入
          cached: 0,            // 是否缓存
          temps: 0,             // 是否有模板
          codegenNode: undefined,  //  真正产生的函数,后面会出现的
          loc                     // 位置相关的一个对象,前面有定义
      };
  }

以下函数的编译时用到的函数,先看默认编译配置

const defaultParserOptions = {             // 默认编译配置项
      delimiters: [`{{`, `}}`],            // {{}}里的内容
      getNamespace: () => 0 /* HTML */,    // 后面有定义
      getTextMode: () => 0 /* DATA */,     // 后面有定义
      isVoidTag: NO,                       // 是否空标签
      isPreTag: NO,                        // 是否预定义标签
      isCustomElement: NO,                //  是否经常出现的元素
      decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),
      onError: defaultOnError   // 编译出错时触发默认的错误
  };// 默认解析项

重点要看产生编译上下文环境的函数

到这里是2445行了,可以发现作者把一个复杂的功能不断的拆分,分成很多小函数,这样可以复用,代码结构也清晰,哦当然这是打包后的代码,原代码是用ts分包写的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值