React 初探之 rc-form

概述

当使用 React 进行一些用户输入的行为时,我们需要拿到用户输入,即将输入框设置为受控组件,这时需要使用其他的库,我们主要使用 rc-form 这个库,它是 react 高阶 form 组件。 官方文档

import { createForm, formShape } from 'rc-form';
class Form extends React.Component {
  static propTypes = {
    form: formShape,
  submit = () => {
    this.props.form.validateFields((error, value) => {
      console.log(error, value);
  render() {
    let errors;
    const { getFieldProps, getFieldError } = this.props.form;
    return (
        <input {...getFieldProps('normal')}/>
        <input {...getFieldProps('required', {
          onChange(){},  // have to write original onChange here if you need
          rules: [{required: true}],
        {(errors = getFieldError('required')) ? errors.join(',') : null}
        <button onClick={this.submit}>submit</button>
export createForm()(Form);
  • static 用法。关键字 static 用于定义静态方法,并且不能在类的实例上调用静态方法,而应该通过类本身调用。上述例子中定义 propTypes 属性,不太懂???并且后面都没有用到这个属性的

  • 通过 createForm()(Form) 使得组件 Formprops 上挂载了一个 form 对象,并且这个 this.props.form 对象有 getFieldPropsgetFieldErrorvalidateFields 三个方法

  • 直接在 input 上挂载 rc-form 的属性即可将 input 设置为受控组件

  • createForm

    getFieldProps

    getFieldProps(name, option): Object { [valuePropName], [trigger], [validateTrigger] } 
    

    将会在可以支持 valueonChange 接口的 input 或者 inputComponent 设置 props。设置之后将会创建一个绑定在 input 上

    <input {...getFieldProps('name', { ...options })} /> </form>
    name: String

    这个 input 唯一的 name

    option: Object
    Option Description Default

    option.getValueFromEvent 的默认值

    function defaultGetValueFromEvent(e) {
      if (!e || !e.target) {
        return e;
      const { target } = e;
      return target.type === 'checkbox' ? target.checked : target.value;
    

    validateField

    validateFields([fieldNames: String[]], [options: Object], callback: (errors, values) => void)
    

    通过字段名验证并且获取字段值

    options

    options 和 async-validator 的方法相同,并且增加了 forcescroll