antd form表单 自定义组件 取值,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 (
      <div>
        <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>
      </div>
    );
  }
}

export createForm()(Form);

自己项目使用例子:

import { createForm } from 'rc-form';

const { getFieldProps,getFieldError } = this.props.form;

export default createForm()(Registration);

 

说明:

  1. static 用法。关键字 static 用于定义静态方法,并且不能在类的实例上调用静态方法,而应该通过类本身调用。上述例子中定义 propTypes 属性,不太懂???并且后面都没有用到这个属性的

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

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

API

createForm

getFieldProps

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

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

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

name: String

这个 input 唯一的 name

option: Object

OptionDescriptionTypeDefault
option.valuePropName组件 value 字段的属性名称,eg. checkbox 应该设置为 checkedString'value'
option. getValueProps从 value 字段中获取组件 props(value): Object(value) => ({value})
option.initialValue当前组件的初始值any-
option. normalize返回标准化值(value, prev, all): Object-
option.trigger用于收集表单数据的事件String'onChange'
option.validateTrigger被监听已验证的事件,设置为 falsy 以仅在调用 props.validateFields 时验证StringString[]
option.rules验证规则,详情Object[]-
option.validateFirst是否停止验证这个字段的第一个 error 规则Booleanfalse
option.validate Object[]-
option.hidden忽略当前字段当验证或者获取这个字段时Booleanfalse
option.preserve是否保留该值,当字段卸载并重新安装时,该值将保持不变Booleanfalse
option.getValueFromEvent指定如何从事件中获取值(e): any详情见下面

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值