JSX 是 JavaScript XML 的缩写,它是一种在 React 中定义组件结构的语法扩展。尽管 JSX 看起来很像 HTML,但它并不是真正的 HTML,而是会被 Babel 或其他 JSX 转换器转换成对应的 JavaScript 调用。以下是 JSX 的一些基本语法规则:
- 标签语法:
- JSX 允许在 JavaScript 中使用类似于 HTML 的标签语法。
- 标签可以拥有属性,属性名使用 camelCase 而不是全小写。
- 标签内部可以包含文本内容或其他 JSX 元素。
- 嵌套的元素:
- JSX 中可以嵌套其他 JSX 元素,就像 HTML 一样。
- 嵌套元素应该缩进以清晰地表示其层次结构。
- 表达式:
- 你可以在 JSX 中使用 JavaScript 表达式,只需将表达式包含在大括号
{}
中。 - 表达式的结果将被插入到 JSX 元素中。
- 你可以在 JSX 中使用 JavaScript 表达式,只需将表达式包含在大括号
- 注释:
- JSX 中不支持 HTML 风格的注释(
<!-- comment -->
)。 - 相反,应该使用 JavaScript 的单行(
//
)或多行(/* comment */
)注释风格。
- JSX 中不支持 HTML 风格的注释(
- 自闭合标签:
- 在 JSX 中,某些标签可能是自闭合的(self-closing),就像 XML/HTML 一样。
- 这些标签以
/>
结尾,而不是</tag>
。例如:<img src="image.png" alt="an image" />
。
- 属性:
- JSX 中的标签可以具有多个属性。
- 属性名应使用 camelCase 命名约定,而不是 HTML 中的全小写形式。例如,HTML 中的
class
在 JSX 中应写为className
。 - 所有的属性值都应该被包裹在引号中,可以是单引号或双引号。
- 布尔属性:
- 对于布尔属性(如
disabled
,required
,autoFocus
等),只需写属性名即可,不需要赋值。 - 例如:
<input type="text" disabled />
。
- 对于布尔属性(如
- 样式属性:
- 在 JSX 中设置样式时,通常使用一个对象来表示样式,而不是使用
style
属性的字符串值。 - 样式对象的键使用 camelCase 而不是使用 CSS 中的连字符分隔形式。例如:
style={{ backgroundColor: 'blue', fontSize: '16px' }}
。
- 在 JSX 中设置样式时,通常使用一个对象来表示样式,而不是使用
- 事件处理:
- 在 JSX 中,你可以为元素添加事件处理程序,如
onClick
,onChange
等。 - 这些事件处理函数应该是定义在组件中的方法或通过箭头函数直接定义。
- 在 JSX 中,你可以为元素添加事件处理程序,如
- 列表和键:
- 在 JSX 中渲染列表时,每个列表项元素都应该有一个独特的
key
属性。 - 这有助于 React 识别哪些项已更改、添加或删除,并优化渲染性能。
- 在 JSX 中渲染列表时,每个列表项元素都应该有一个独特的
- 特殊字符:
- 如果需要在 JSX 中显示特殊字符(如
<
,>
,&
,"
,'
),则应该使用它们对应的 HTML 实体编码,或者使用{'\u003C'}
(对应<
)这样的 Unicode 转义序列。
- 如果需要在 JSX 中显示特殊字符(如
- 根元素:
- 在一个组件的 render 方法或函数组件的返回值中,只能有一个根元素。如果有多个元素需要返回,它们必须被包裹在一个单独的父元素内(如一个
<div>
或<React.Fragment>
)。
- 在一个组件的 render 方法或函数组件的返回值中,只能有一个根元素。如果有多个元素需要返回,它们必须被包裹在一个单独的父元素内(如一个
这些规则是 JSX 的基础,并帮助开发者编写清晰、可维护的 React 组件代码。