受控组件
React的state 成为“唯一数据源”。渲染表单的React组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式
控制取值的表单输入元素就叫做“受控组件”。
React把控制取值的表单元素叫做受控组件
受控组件实例
import React from 'react';
export class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = { value: '' };
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({ value: event.target.value });
}
handleSubmit(event) {
alert('提交的名字: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
名字:
<input type="text" value={this.state.value} onChange={this.handleChange} />
<p>{this.state.value}</p>
</label>
<input type="submit" value="提交" />
</form>
);
}
}
技术原理:双向绑定;通过state生成虚拟DOM,给虚拟DOM中的表单添加事件,改变state的值,这个过程被称为双向绑定
双向绑定也是vue的原理
PropTypes类型检测
判断js数据类型,也就是我们说的类型检测
原生JS类型
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
实例:
import React from 'react';
import PropTypes from 'prop-types';
export class Greeting extends React.Component {
constructor() {
super();
}
render() {
this.props={
name:'lily',
age:'13'
}
return (
<div>
<h1>Hello, {this.props.name}</h1>
<h1>Hello, {this.props.age}</h1>
</div>
);
}
}
Greeting.propTypes = {
name: PropTypes.string
};