react中可直接使用等html5语义标签,因其编译为React.createElement()且浏览器原生支持;需注意大小写区分(是标签,是组件)、自闭合标签斜杠、IE兼容性及用Fragment替代无意义div包装。

React中直接写
等html5标签完全合法
jsX本质是语法糖,最终编译为React.createElement()调用,只要浏览器支持的原生HTML标签,React都允许直接使用。不需要额外引入、不需要加react-前缀,也不需要包裹在
里“降级兼容”。
常见误区是以为必须用
代替JSX里
IE11及更老浏览器需要
用
——这反而丢失了语义和seo价值。
-
、、
、、、全部可直接书写 - 注意:所有自闭合标签(如
)必须带斜杠,会报错 - 属性名沿用HTML规范,比如
aria-label、role、tabIndex(不是tabindex)
JSX里
不能当组件名用,但可以当HTML标签用
React区分大小写:
(首字母大写)会被当作自定义组件,而
(全小写)始终被识别为原生html元素。
如果写了
但没定义这个组件,控制台会报Element type is invalid错误;如果本意就是HTML语义标签,却写成大写,就会意外触发组件查找逻辑。
立即学习“前端免费学习笔记(深入)”;
IE11及更老浏览器需要document.createElement补丁
HTML5结构标签在IE8–IE10中不被识别为块级元素,会导致样式失效(比如
默认显示为行内元素)。React本身不处理这个兼容问题,需手动修复。
现代项目基本已放弃IE支持,但如果必须兼容,有两种方式:
- 全局执行
document.createElement('header')等语句(通常放在index.html的里) - 引入
html5shiv脚本(仅对传统HTML有效,对React动态渲染的节点作用有限) - 更稳妥的做法:在css中显式声明
header, nav, main, section, article, aside, footer { display: block; }
用React.Fragment替代无意义的
包装
很多人为了满足JSX单根节点要求,习惯性用
包裹
和,但这会污染dom结构、干扰css选择器(如body > div)和屏幕阅读器导航。
正确做法是用React.Fragment(或简写>)作为容器:
function Layout() { return ( <> 网站标题 主要内容 > ); }
Fragment不会出现在最终DOM中,既满足JSX语法约束,又保持HTML5结构纯净。注意:带key属性时必须用完整写法,不能用简写。
真正容易被忽略的是:当组件返回多个并列的HTML5标签时,开发者第一反应仍是套一层
,而不是想到Fragment——这会让语义结构悄悄退化成一堆
。
包装
很多人为了满足JSX单根节点要求,习惯性用
包裹
和,但这会污染dom结构、干扰css选择器(如body > div)和屏幕阅读器导航。
正确做法是用React.Fragment(或简写>)作为容器:
function Layout() { return ( <> 网站标题 主要内容 > ); }
Fragment不会出现在最终DOM中,既满足JSX语法约束,又保持HTML5结构纯净。注意:带key属性时必须用完整写法,不能用简写。
真正容易被忽略的是:当组件返回多个并列的HTML5标签时,开发者第一反应仍是套一层
,而不是想到Fragment——这会让语义结构悄悄退化成一堆
。