React第三讲课堂笔记(数据流)

1. state setState

可以把组件当成一个状态机,我们给组件传入数据作为输入,组件在内部进行逻辑处理,之后返回一段HTML结构作为输出。

而传入的数据即为props,组件内部的状态控制即为state,每一次状态对应于组件的一个 ui 。

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
import React, { Component } from 'react';

class StateDemo extends Component {

state = {
secondsElapsed: 0
}

tick(){
this.setState({ secondsElapsed: this.state.secondsElapsed + 1 });
}

componentDidMount(){
this.interval = setInterval( this.tick.bind(this), 1000 );
}

componentWillUnmount(){
clearInterval(this.interval);
}

render(){
return (
<div>目前已经计时:{this.state.secondsElapsed}秒</div>
)
}
}

export default StateDemo;

2. props

通过 this.props 可以获取传递给该组件的属性值,还可以通过定义 getDefaultProps 来指定默认属性值(这是ES5的写法,ES6定义组件的默认props可以直接写props)

下面几个是props的常用API:

  • this.props.children
  • this.props.map
  • this.props.filter

props是调用组件的时候传递进去的数据,一般用于组件树数据传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import React, { Component } from 'react';

class PropsDemo extends Component {
props = {
title: '这是默认的title属性值'
}
render(){
console.log(this.props);

return <b>{this.props.title}</b>
}
}

export default PropsDemo;


// 组件调用方式
// <PropsDemo title="设置的标题" />

3. propTypes

通过指定 propTypes 可以校验props属性值的类型,校验可提升开发者体验,用于约定统一的接口规范。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import React, { Component, PropTypes } from 'react';

class PropTypesDemo extends Component {

render(){
return <b>{this.props.title}</b>
}
}

PropTypesDemo.defaultProps= {
title: '我是默认的title'
}

PropTypesDemo.propTypes = {
title: PropTypes.string.isRequired
}

export default PropTypesDemo;