一、react组件定义的3种方式:
1、es5原生方式
| 1
 | var reactComponent = React.createClass({ ...})
 | 
2、es6的class继承方式
| 1
 | class reactComponent extends React.Component({...})
 | 
3、无状态函数式
| 1
 | function reactComponent(props) {...}
 | 
二、各类常见组件
1、从setState来分:受控组件和非受控组件
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | 
 class reactComponent extends React.Component({
 render() {
 return (
 <input type="text"/>
 )
 }
 })
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | 
 class reactComponent extends React.Component({
 constructor() {
 super(props);
 this.state = {
 value: '',
 }
 
 }
 
 handleChange(e) {
 this.setState({
 value: e.target.value,
 })
 }
 
 render() {
 return (
 <input type="text"
 value={this.state.value}
 onChange={e => this.handleChange(e)}
 />
 )
 }
 });
 
 | 
2、从组件返回来分:高阶组件
| 12
 3
 4
 5
 6
 7
 
 | class reactComponent = class extends Component {
 render() {
 if (!this.props.data) return <div>高阶组件...</div>;
 return <div>{this.data}</div>;
 }
 }
 
 | 
3、从整体的功能来分:容器组件和展示组件
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | 
 
 
 
 @connect(stateMapProps, distpathMapProps)
 class reactComponent extends Component {
 render() {
 return (
 <div>...</div>
 )
 }
 }
 
 /**
 * 只负责数据渲染
 */
 const InputComponent = ({value}) => {
 return (
 <div>
 <input value={value}/>
 </div>
 )
 }
 
 | 
组件之间也不是绝对划分的,而是根据实际功能去创建。