原地址:https://npm.taobao.org/package/rc-formnode
React 高阶表单控制组件。react
npm install npm start open http://localhost:8000/examples/
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);
更多用法预览git
查看源码github
或者更轻快的用法:chrome
import { createForm } from 'rc-form'; class Form extends React.Component { componentWillMount() { this.requiredDecorator = this.props.form.getFieldDecorator('required', { rules: [{required: true}], }); } submit = () => { this.props.form.validateFields((error, value) => { console.log(error, value); }); } render() { let errors; const { getFieldError } = this.props.form; return ( <div> {this.requiredDecorator( <input onChange={ // can still write your own onChange } /> )} {(errors = getFieldError('required')) ? errors.join(',') : null} <button onClick={this.submit}>submit</button> </div> ); } } export createForm()(Form);
选项 | 描述 | 类型 | 默认值 |
---|---|---|---|
option.validateMessages | async-validator的预置消息 | Object | {} |
option.onFieldsChange | 当字段名改变时调用, 能够dispatch字段到redux store. | (props, changed, all): void | NOOP |
option.onValuesChange | 当值改变时调用 | (props, changed, all): void | NOOP |
option.mapProps | 获取新的props 并转移到 WrappedComponent组件. | (props): Object | props => props |
option.mapPropsToFields | 将值从props 转换为字段. 用于redux store的可读字段. | (props): Object | NOOP |
option.fieldNameProp | 存储 getFieldProps 的 name 参数. | String | - |
option.fieldMetaProp | 存储 getFieldProps 的元数据(meta data). | String | - |
option.fieldDataProp | 存储字段值 | String | - |
option.withRef(deprecated) | 维持wrapped component实例的ref,使用 refs.wrappedComponent 访问. | boolean | false |
class Form extends React.Component { ... } // deprecated const EnhancedForm = createForm({ withRef: true })(Form); <EnhancedForm ref="form" /> this.refs.form.refs.wrappedComponent // => The instance of Form // Recommended const EnhancedForm = createForm()(Form); <EnhancedForm wrappedComponentRef={(inst) => this.formRef = inst} /> this.formRef // => The instance of Form
createForm()的返回函数. 它将以prop 的形式传递一个对象,并将下列成员传递给WrappedComponent:npm
这将建立一个prop值,该值能够设置在支持值和onChange接口的input或InputComponent上。redux
设置以后,将在input上建立一个binding。react-native
<form> <input {...getFieldProps('name', { ...options })} /> </form>
该input的惟一名称。app
选项 | 描述 | 类型 | 默认值 |
---|---|---|---|
option.valuePropName | 组件的值的字段的prop名称,例如:checkbox的设置是checked | String | 'value' |
option.getValueProps | 经过字段值获取组件的props. | (value): Object | (value) => ({ value }) |
option.getValueFromEvent | 指定如何从事件中获取值。 | (e): any | See below |
option.initialValue | 当前组件的值的初始化。 | any | - |
option.normalize | 返回正常的值. | (value, prev, all): Object | - |
option.trigger | 监听表单数据事件. | String | 'onChange' |
option.validateTrigger | 监听校验事件. 当只调用props.validateFields用于校验的时候设置. | String | String[] |
option.rules | 校验规则. 参考: async-validator | Object[] | - |
option.validateFirst | 是否中止对该字段的第一条错误规则进行校验。 | boolean | false |
option.validate | Object[] | - | |
option.validate[n].trigger | 监听校验事件. 当只调用props.validateFields用于校验的时候设置. | String | String[] |
option.validate[n].rules | 校验规则. 参考: async-validator | Object[] | - |
option.hidden | 在验证或获取字段时忽略当前字段 | boolean | false |
getValueFromEvent的默认值
function defaultGetValueFromEvent(e) { if (!e || !e.target) { return e; } const { target } = e; return target.type === 'checkbox' ? target.checked : target.value; }
{ validateTrigger: 'onBlur', rules: [{required: true}], } // is the shorthand of { validate: [{ trigger: 'onBlur', rules: [required: true], }], }
与 getFieldProps类似
, 可是增长了一些帮助warning信息,能够直接在 React.Node props写 onXX :dom
<form> {getFieldDecorator('name', otherOptions)(<input />)} </form>
经过fieldNames获取字段值.
经过fieldName获取字段值.
经过字段名称获取字段的公共实例。
经过 kv object设置字段值.
经过KV对象设置字段初始值。用于重置和初始显示/值。
用KV对象设置字段。每一个字段的内容均可以包含错误信息和值。
经过fieldNames校验并获取字段值.
与async-validator的校验方法相同. 而且增长 force and scroll . scroll dom-scroll-into-view's 函数参数 config 相同.
默认为false. 是否校验已经校验过的字段(由ValueTebug触发)。
获取input的校验错误信息.
获取input的校验错误信息.
该input是否已校验。
是否有一个input校验。
这个input的值是否已经被用户改变了。
是否有一个input的值已经被用户改变了。
重置指定的输入。默认为全部。
表单是否已提交.
因为提交返回true,调用callback后,提交返回false。
createDOMForm 扩展, 支持props.form.validateFieldsAndScroll
props.form.validateFields 扩展, 支持滚动到第一个非法表单字段
默认为窗体字段的第一个滚动容器(直到文档)。
不要在表单组件中使用无状态功能组件: https://github.com/facebook/react/pull/6534
不能将相同的prop名称设置为GeFieldPro的校验Trigger/trigger的值
<input {...getFieldProps('change',{ onChange: this.iWantToKnow // you must set onChange here or use getFieldDecorator to write inside <input> })}>
<input {...getFieldProps('ref')} /> this.props.form.getFieldInstance('ref') // use this to get ref
或者
<input {...getFieldProps('ref',{ ref: this.saveRef // use function here or use getFieldDecorator to write inside <input> (only allow function) })} />
npm test
npm run chrome-test
npm run coverage
打开coverage/ dir
rc-form是在MIT许可下发布的。