You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue DOM模板中PascalCase与kebab-case使用场景解惑

Vue组件命名:何时必须用kebab-case?

首先得理清Vue模板的两种核心编译场景,这就是你疑惑的关键:

1. 你项目里PascalCase能正常工作的场景

如果你用的是单文件组件(.vue) 或者通过Vue选项里的template字段写的字符串模板,这些模板会先被Vue的编译器直接处理,根本轮不到浏览器的HTML解析器插手。这种情况下:

  • PascalCase(<MyComponent/>)、kebab-case(<my-component/>)都能正常识别
  • 自闭合标签也完全没问题

这就是你项目里两种命名都能用的原因。

2. 文档说的「特定情况」:直接在DOM中编写模板

只有当你的模板内容需要先经过浏览器HTML解析器处理时,才必须严格遵循kebab-case和显式闭合标签,具体场景包括:

  • 把模板写在页面原生的<template>元素内部
  • 直接把模板代码写在挂载目标元素(比如<div id="app">...</div>)的innerHTML里
  • 使用组件的inline-template属性时的模板内容

为什么必须用kebab-case?

这是浏览器HTML的固有规则决定的:

  • HTML标签名在解析时会强制转为小写,你写的<MyComponent>会被浏览器自动变成<mycomponent>——没有连字符,和你注册的组件名(不管是PascalCase的MyComponent还是对应的kebab-casemy-component)都对不上,导致Vue找不到组件。
  • HTML规范要求自定义元素必须包含连字符(避免和原生标签冲突),my-component这种kebab-case写法符合规范,浏览器解析后不会变形,Vue能正确映射到你注册的组件。
  • 另外,原生HTML里只有少数标签支持自闭合(比如<img/>),自定义组件必须用显式闭合标签<my-component></my-component>,否则浏览器可能解析出错,导致模板结构混乱。

总结

简单说:

  • 模板由Vue编译器先处理(SFC/字符串模板):随便用PascalCase或kebab-case,自闭合也OK
  • 模板先由浏览器HTML解析器处理(DOM内写模板):必须用kebab-case组件名 + 显式闭合标签

内容的提问来源于stack exchange,提问作者mcool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:50