vue 报错 :[Vue warn]: Do not use built-in or reserved HTML elements as comp

引入组件后出现了如下报错:
在这里插入图片描述
是因为组件的命名和html标签重复导致警告,如下:
在这里插入图片描述

解决方案是给 name 换个名字就可以啦,如下:
在这里插入图片描述

所以,创建组件的时候要注意组件命名与html标签区分开。

由于模板需要插入到 DOM 中,所以模板中的标签名必须能够被 DOM 正确地解析。

主要有三种情况:

一是完全不合法的标签名,例如 </> ;

二是与 HTML 元素重名会产生不确定的行为,例如使用 input 做组件名不会解析到自定义组件,使用 button 在 Chrome 上正常但在 IE 上不正常;

三是与 Vue 保留的 slot、partial、component 重名,因为会优先以本身的意义解析,从而产生非预期的结果。

命名限制存在的根本原因是:模板解析的过程依赖了 DOM。

在vue 2.0中主要改进的地方就是将模板解析过程使用 Virtual DOM 实现,这样就使得组件命名更加灵活。

vue 2.0中HTML 标签和 Vue 保留标签的范围:

// 区分大小写
var isHTMLTag = makeMap(
  'html,body,base,head,link,meta,style,title,' +
  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
  'div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,' +
  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
  'embed,object,param,source,canvas,script,noscript,del,ins,' +
  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
  'output,progress,select,textarea,' +
  'details,dialog,menu,menuitem,summary,' +
  'content,element,shadow,template'
);
// 不区分大小写
var isSVG = makeMap(
  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font,' +
  'font-face,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
  true
);
var isReservedTag = function (tag) {
  return isHTMLTag(tag) || isSVG(tag)
};
// 区分大小写
var isBuiltInTag = makeMap('slot,component', true);

可以看出, Vue 2.0 引入的Virtual DOM的用处:HTML 元素重名警告的标签数大大增加了,但是重名区分大小写,所以,在使用 Input、Select、Option 等时不用担心重名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值