02-React-jsx

jsx

JavaScript XML, 用来简化创建虚拟 DOM,通过 Babel 编译器将 jsx 相关代码转为 React 可识别的组件代码形式

  • 表达式:jsx 中只支持表达式; 一个表达式会产生一个值,可以放在任何一个需要值的地方,

Demo

1
2
3
4
5
React.createElement(
type,
[props],
[...children]
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component {
render() {
return (
React.createElement(
"div",
{
className: 'app',
id: 'appRoot'
}, React.createElement(
"h1",
{ className: 'title' },
"欢迎进入 React 的世界"
),
React.createElement(
"p",
null,
"React.js 是一个构建页面 UI 的库"
)
)
)
}
}

ReactDOM.render(
// <App/>,
React.createElement(App),
document.getElementById('root')
)

语法规则

1
2
3
4
5
6
7
8
const data = 'Hello React'
const VDOM = (
<div>
<h1 className="title" style={ {color: 'white', backgroundColor: 'black', fontSize: '60px'} }>{data}</h1>
<h2>Hello Peiqi</h2>
{/*<Peiqi>peiqi is a pig</Peiqi>*/}
</div>
)

Tips:React 组件的样式官方推荐使用行内样式,旨在将组件看作一个整体,复用时只需要迁移一个组件代码即可

1、创建虚拟 DOM 时不要写 引号

2、标签中混入 js 表达式使用 花括号

3、标签中样式的类名要用 className 指定; for 关键字要用 htmlFor

4、标签中的内联样式要使用 js 对象传入 - 双层花括号,使用小驼峰改写 css 变量名

5、只能有一个根标签

6、单标签需要闭合 <input type='text' />

7、标签首字母小写,那么 React 就会去 HTML 中寻找与之同名的 HTML 标签;若首字母大写,则寻找同名组件

8、注释需要使用 花括号 + js 块注释