html本身不支持组件化渲染,所有组件行为均依赖react、vue等前端框架通过javascript模拟实现;原生仅标签可作dom片段容器,但需手动克隆与赋值,无数据绑定或自动更新能力。

HTML 本身不支持组件化渲染,所有“组件”行为都依赖前端框架(如 React、Vue)在运行时用 JavaScript 模拟和接管;直接写 HTML 标签不会自动复用、不会响应数据变化、也不会隔离样式与逻辑。
HTML 的 <template></template> 标签是唯一原生“组件雏形”
它不被渲染,可存放结构片段,适合做行级模板克隆。但注意:<template></template> 只提供 DOM 片段容器,不带数据绑定、不自动更新、不处理生命周期。
- 必须配合 JS 手动克隆:
content.cloneNode(true),再逐个填值(row.querySelector('.name').textContent = item.name) - 不能直接用
innerHTML往<template></template>里塞字符串——会丢失其“不激活”特性,变成普通 HTML 解析 - 若用在表格中,
<template></template>必须放在<tbody> 外(如页面顶部),否则浏览器可能因解析顺序异常而忽略 <h3>React 的 JSX 不是 HTML,而是 <code>React.createElement()的语法糖写
<mybutton onclick="{handleClick}">Click</mybutton>看似像 HTML,实际编译后是调用React.createElement('MyButton', {onClick: handleClick}, 'Click')。这意味着:- 所有标签名首字母大写即视为自定义组件,小写则转为原生 DOM 标签(
<div> → <code>div,<mydiv></mydiv>→MyDiv函数) - JSX 中不能写
if或for,得用三元、逻辑与、Array.map()等 JS 表达式替代 - 没有单一根元素会报错:
return <div></div> <span></span>不合法,必须包一层 Fragment 或 div -
{{ msg }}会原样显示在页面上,浏览器根本不认识这种语法 -
v-for="item in list"被当作文本属性,既不报错也不生效 - 即使引入 Vue CDN,也必须显式调用
createApp()并挂载,HTML 自身零执行能力
Vue 的模板语法靠编译器注入响应式逻辑,HTML 无法原生承载
Vue 单文件组件中的
<template></template>块会被编译成渲染函数,其中的{{ msg }}、v-if、v-for全部转为对响应式对象的依赖收集与触发更新。纯 HTML 文件打开后:真正容易被忽略的是:框架渲染的“组件”,本质是 JavaScript 对象 + DOM 操作策略 + 更新队列调度的组合;HTML 标签只是它们选择的**序列化外观**,不是运行基础。脱离框架运行时,那些标签就只是静态字符串。
- 所有标签名首字母大写即视为自定义组件,小写则转为原生 DOM 标签(











