# React组件示例
# 1. 示例一
数字时钟
- 静止的时间
new Date().toLocaleDateString()
=>"2021/2/24"
new Date().toLocaleTimeString()
=>"下午9:13:07"
<!-- 核心js -->
<script src="../react/react.js"></script>
<!-- 虚拟dom -->
<script src="../react/react-dom.js"></script>
<!-- 使用 JSX(jsx用babel打包成js) -->
<script src="../babel/browser.js"></script>
<div id="app"></div>
<script type="text/babel">
class Clock extends React.Component {
// constructor最先执行,之后执行render
// 构造函数
constructor() {
super(); // 为了能使用this
// 获取dom中time值
// 因为render的时候构造函数还没有执行,所以先执行构造函数里面的this.props报错
// console.log(this.props.time); // undefind
}
// react原型
render() {
// 获取dom中time值 - 可以获取值
console.log(this.props.time);
return (
<div>
// this.props.time 报错,无法显示对象
<span>{this.props.time.getTime()}</span>
<span>{this.props.time.toLocaleDateString()}</span>
<span>{this.props.time.toLocaleTimeString()}</span>
</div>
)
}
}
// 渲染
ReactDOM.render(<Clock time={new Date()} />, app);
</script>
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
32
33
34
35
36
37
38
39
40
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
32
33
34
35
36
37
38
39
40
- 让时间动起来
<script src="../react/react.js"></script>
<script src="../react/react-dom.js"></script>
<script src="../babel/browser.js"></script>
<div id="app"></div>
<script type="text/babel">
class Clock extends React.Component {
// 构造函数
constructor() {
super(); // 为了能使用this
this.state = {
time: new Date()
}
setInterval(()=> {
// 箭头函数的this指向他父级
this.setState({
time: new Date()
});
}, 1000);
}
// react原型
render() {
return (
<div>
<span>{this.state.time.toLocaleDateString()}</span>
<span>{this.state.time.toLocaleTimeString()}</span>
</div>
)
}
}
// 渲染
ReactDOM.render(<Clock />, app);
</script>
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
32
33
34
35
36
37
38
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
32
33
34
35
36
37
38
# 2. 示例二
加减数字框
<script src="../react/react.js"></script>
<script src="../react/react-dom.js"></script>
<script src="../babel/browser.js"></script>
<div id="app"></div>
<script type="text/babel">
class NumberNode extends React.Component {
// 构造函数
constructor() {
super(); // 为了能使用this
this.state = {
number: 10
}
}
// react原型
render() {
return (
<div>
// 改变方法中的this指向
<button onClick={this.last.bind(this)}>-</button>
<button onClick={this.next.bind(this)}>+</button>
<div>{this.state.number}</div>
</div>
)
}
// 方法
// -
last() {
this.setState({
// 判断他是否和定义的dom值相等 - 同时dom那边是字符串
number: this.state.number == Number(this.props.min) ? this.props.min : (this.state.number - 1)
});
}
// +
last() {
this.setState({
// 判断他是否和定义的dom值相等
number: this.state.number == Number(this.props.max) ? this.props.max : (this.state.number + 1)
});
}
}
// 渲染
ReactDOM.render(<NumberNode min='0' max='15' />, app);
</script>
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50