请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于 mountComponent 错误处理的疑惑

图片描述
位于 core/instance/lifeCycle
想请教下黄老师,
第一个警告为什么需要增加这样的判断,不加可不可以?
第二个警告,什么情况下会出现未定义 template 而导致 mountComponent 错误 ?

正在回答 回答被采纳积分+3

3回答

提问者 qq_漫笔_0 2021-10-11 17:27:12

自问自答环节:

关于第一个问题,在网上查了很多资料,依旧一无所获。
于是到 github 看了下 vue 的 commit 记录,发现早期 v2.1 版本时并没有这个条件判断,该条件判断来源于此条 issue : https://github.com/vuejs/vue/issues/4171

结论: 为了避免使用完整版构建时 空的 <teamplate> 命中第一条警告的条件判断,对开发者产生误导。

因为有 template 选项会优先使用template 而不是 el 选项 生成模板,teamplate 有两种定义方式,一种是 domNode,一种是 string,string可以传入两种,一种是 domString,另一种是 id 选择器。如果使用 domString,使用完整版构建没有任何问题,如果使用  id 选择器,而对应的 teamplate 的 innerHTML 正好为 空,则不会生成 render 函数,如果没有图中标注的条件判断,则会抛出“You are using the runtime-only build...”的错误,即使当前正在使用的是独立构建版本。

为此,vue后来新增了这一条判断逻辑,并在 开发模式下 $mount 中如果 template 为空,会抛出警告!

4 回复 有任何疑惑可以回复我~
提问者 qq_漫笔_0 2021-10-11 17:31:06

如上所述

0 回复 有任何疑惑可以回复我~
提问者 qq_漫笔_0 2021-10-11 13:04:33

第二个问题我似乎明白了点,第二个警告是一个更宽泛的警告,既可能是因为使用完整版vue未生成render函数引起,也可能是因为使用运行时vue未定义render函数引起。
具体来说,完整版vue未生成render函数,就是因为 template 未取到,template来源两种,template定义 然后是 el 的outerHTML。

0 回复 有任何疑惑可以回复我~
  • 对的,如果使用 CDN 版本的 Vue.js,而不是 SFC,是可能出现定义组件既没有定义 render 函数,也没有定义 template 的情况
    回复 有任何疑惑可以回复我~ 2021-10-12 10:05:57
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号