受控组件、PropTypes类型检测

129 阅读1分钟

受控组件

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 });//将表单中输入的内容传到state中
    }

    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
    };