本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/01/27/%E4%BB%80%E4%B9%88%E6%98%AFJSX/
摘要
本文主要讲述了:
- 什么是 JSX
- 将 React 元素写成多行
- 一个 React 元素有且只有一个顶层元素
- 空元素
- HTML 特性
- 注释
- 插值
正文
什么是 JSX
JSX 的全称是 JavaScript XML,它是 JavaScript 语法的扩展,看起来和 HTML 很像
JSX 无法直接在浏览器里运行,所以需要使用babel
将其编译成 JavaScript
JSX 的本质就是React.createElement()
的语法糖
示例:
1 | const element = <h1>hello, world</h1>; |
将 React 元素写成多行
如果一个 React 元素由多个元素嵌套构成,为了提升代码可读性,常常将其写为多行
此时需要在最外层使用小括号包裹,否则 JavaScript 运行时可能会自动插入分号导致代码运行报错
示例:
1 | const element = ( |
一个 React 元素有且只有一个顶层元素
默认情况下,一个 React 元素有且只有一个顶层元素,否则会报错
示例:
1 | const element = ( |
React.Fragment
组件
React.Fragment
组件可以让一个 React 元素拥有多个顶层元素
示例:
1 | const element = ( |
或
1 | // 简写形式 |
空元素
可以写成以下任意一种形式:
- 自封闭
- 存在结束标签
示例:
1 | const element = ( |
或
1 | const element = ( |
HTML 特性
由于各种原因,部分 HTML 特性无法直接在 JSX 中使用
- 使用小驼峰命名法,例如:
tabindex
写作tabIndex
- 由于
class
是 JavaScript 的关键字,因此class
特性写作className
- 由于
for
是 JavaScript 的关键字,因此for
特性写作htmlFor
className
- 不要传递数组或对象给
className
。传入的值会被先转换成字符串,而后再参与页面渲染
style
- 在 HTML 中,元素的
style
特性接受 CSS 字符串,但在 JSX 中,style
特性接受一个 JavaScript 对象 - JavaScript 对象的属性名称使用小驼峰命名法,例如:
font-size
写作fontSize
- React 不会自动补齐 CSS 属性的浏览器引擎前缀
- 对于部分属性,React 将会在
number
型属性值后自动添加px
后缀
示例:style
特性
1 | const foo = { |
注释
示例:单行注释
1 | const element = ( |
示例:多行注释
1 | const element = ( |
插值
textContent
- 形式:使用
{}
包裹 JavaScript 变量 - 本质:将 JavaScript 变量作为子元素
示例:
1 | const element = <div>{1 + 1}</div>; |
会被渲染:
string
number
:包括但不限于:0
、1
、-1
、NaN
、Infinity
Array
:数组中的元素会被挨个渲染
不会被渲染:
boolean
undefined
null
通常情况下,会报错:
Object
function
示例:
1 | // 传入`Object`作为子元素 |
更进一步
注意:
- 只要组件对传入的
props
进行了处理,传入Object
、function
作为子元素就不会报错 - React 术语 Render Props 指的就是:传入自定义元素的某个
props
,为一个返回值类型为 React 元素的函数
示例:
1 | // 组件对传入的`props`进行了处理 |
HTML 特性
注意:
- 不准使用双引号包裹
- 使用小驼峰命名法
示例:
1 | const imgUrl = 'https://www.baidu.com/img/bd_logo1.png'; |
DOM 属性
注意:
- 不准使用双引号包裹
- 使用小驼峰命名法
innerHTML
写作dangerouslySetInnerHTML
示例:使用dangerouslySetInnerHTML
时,向其传递一个包含__html
属性的对象
1 | const info = { |
元素变量
React 元素可以存储在单个变量或者数组里
示例:
1 | // 元素变量 |
示例:
1 | const numbers = [1, 2, 3, 4, 5]; |
参考资料
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/01/27/%E4%BB%80%E4%B9%88%E6%98%AFJSX/
本文对你有帮助?请支持我
- 本文链接: https://jsweibo.github.io/2019/01/27/%E4%BB%80%E4%B9%88%E6%98%AFJSX/
- 版权声明: 除非另有说明,否则本网站上的内容根据署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。