在React中,className是用来设置元素类名的属性,而不是class,这是因为class是JavaScript的保留字,用于定义类,为了避免与JavaScript关键字冲突,React采用了className来表示HTML元素的类名。
<h1 class="my-title">Hello</h1>
这个 class
是 HTML 里用来加 CSS 样式的属性,是HTML的语法 —— 表示“这个标签应用了叫 my-title
的样式”。
className
React 使用的是 JSX,它看起来像 HTML,其实是 JavaScript 写法的“变种”。
所以在 React/JSX 里写:
<h1 className="my-title">Hello</h1>
这个 className
也是为了加 CSS 样式!它等价于 HTML 的 class
,只是换了个写法,作用是一样的。
className
呢?因为:
class
是 JavaScript 的关键词(用来定义“类”,比如 class Foo {}
)。class="xxx"
,怕和 JS 冲突。原文说明:
React has always provided a javascript-centric API to the DOM. Since React components often take both custom and DOM-related props, it makes sense for React to use the cameCase convention just like the DOM API.
也就是说:
用法 | 语言 | 加样式方式 |
---|---|---|
HTML | 浏览器原生 | class="btn" |
JSX (React) | JavaScript 语法 | className="btn" |
<h1 class="title">你好</h1>
<h1 className="title">你好</h1>
最终页面效果一模一样,只是写法不同。
React 中的
className
就是 HTML 的class
,只是为了不跟 JavaScript 的class
语法冲突,换了个名字而已,本质都是为了加 CSS 样式。
你可以完全把它当成“加样式用的”,不用去联想“JS 的类”,只不过在 React 写代码时名字叫 className
。