原地址:https://npm.taobao.org/package/rc-form

rc-form

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

react native使用

更多用法预览

查看源码

或者更轻快的用法:

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

createForm(option: Object) => (WrappedComponent: React.Component) => React.Component

选项 描述 类型 默认值
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

注意:在rc-form@1.4.0之后使用WrdabdCysEclipse代替ReffRef

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

(WrappedComponent: React.Component) => React.Component

createForm()的返回函数. 它将以prop 的形式传递一个对象,并将下列成员传递给WrappedComponent:

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

这将创建一个prop值,该值可以设置在支持值和onChange接口的input或InputComponent上。

设置之后,将在input上创建一个binding。

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

name: String

该input的唯一名称。

option: Object

选项 描述 类型 默认值
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],
}],
}

getFieldDecorator(name:String, option: Object) => (React.Node) => React.Node

与 getFieldProps相似, 但是增加了一些帮助warning信息,可以直接在 React.Node props写 onXX :

<form>
{getFieldDecorator('name', otherOptions)(<input />)}
</form>

getFieldsValue([fieldNames: String[]])

通过fieldNames获取字段值.

getFieldValue(fieldName: String)

通过fieldName获取字段值.

getFieldInstance(fieldName: String)

通过字段名称获取字段的公共实例。

setFieldsValue(obj: Object)

通过 kv object设置字段值.

setFieldsInitialValue(obj: Object)

通过KV对象设置字段初始值。用于重置和初始显示/值。

setFields(obj: Object)

用KV对象设置字段。每个字段的内容都可以包含错误信息和值。

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

通过fieldNames校验并获取字段值.

与async-validator的校验方法相同. 并且增加  force  and  scroll .  scroll   dom-scroll-into-view's 函数参数  config相同.

options.force: Boolean

默认为false. 是否校验已经校验过的字段(由ValueTebug触发)。

getFieldsError(names): Object{ [name]: String[] }

获取input的校验错误信息.

getFieldError(name): String[]

获取input的校验错误信息.

isFieldValidating(name: String): Bool

该input是否已校验。

isFieldsValidating(names: String[]): Bool

是否有一个input校验。

isFieldTouched(name: String): Bool

这个input的值是否已经被用户改变了。

isFieldsTouched(names: String[]): Bool

是否有一个input的值已经被用户改变了。

resetFields([names: String[]])

重置指定的输入。默认为所有。

isSubmitting(): Bool (Deprecated)

表单是否已提交.

submit(callback: Function) (Deprecated)

由于提交返回true,调用callback后,提交返回false。

rc-form/lib/createDOMForm(option): Function

createDOMForm 扩展, 支持props.form.validateFieldsAndScroll

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

props.form.validateFields 扩展, 支持滚动到第一个非法表单字段

options.container: HTMLElement

默认为窗体字段的第一个滚动容器(直到文档)。

注意

<input {...getFieldProps('change',{
onChange: this.iWantToKnow // you must set onChange here or use getFieldDecorator to write inside <input>
})}>
  • 不能对getFieldProps使用ref prop
<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许可下发布的。

原地址:https://npm.taobao.org/package/rc-form

rc-form(翻译)的更多相关文章

  1. jquery.form.js(ajax表单提交)

    Form插件地址: 官方网站:http://malsup.com/jQuery/form/ 翻译地址:http://www.aqee.net/docs/jquery.form.plugin/jquer ...

  2. 数据分析师的福音——VS 2017带来一体化的数据分析开发环境

    (此文章同时发表在本人微信公众号“dotNET开发经验谈”,欢迎右边二维码来关注.) 题记:在上个月的Connect() 2016大会上,微软宣布了VS 2017 RC的发布,其中为数据分析师带来了一 ...

  3. sql的一般查询语句(增删改查中的查)

    /*例子 判断规则 http://xxx.xxx/new.php?id=57 and 1=1 正确 http://xxx.xxx/new.php?id=57 and 1=2 错误 http://xxx ...

  4. 安卓系统启动脚本init.rc说明文件readme.txt翻译

    本说明文件位于system/core/init/readme.txt 本文参考深入解析安卓系统一书,进行翻译,版权部分归书的作者  刘超,资深Android专家,系统架构师. 博客地址:http:// ...

  5. [翻译] Visual Studio 2019 RC版发布

    [翻译] Visual Studio 2019 RC版发布 原文: Visual Studio 2019 Release Candidate (RC) now available 今天,我们将分享 V ...

  6. Android启动脚本init.rc说明文档readme.txt翻译

    Android Init Language--------------------- Android初始化语言--------------------- The Android Init Langua ...

  7. 【翻译】利用Qt设计师窗体在运行时创建用户界面(Creating a user interface from a Qt Designer form at run-time)

    利用Qt设计师窗体在运行时创建用户界面 我们利用Calculator窗体例子中创建的窗体(Form)来展示当一个应用(application)已经生成后,是可以在其运行时产生与例子中相同的用户界面. ...

  8. [翻译] .NET Core 3.0 RC 1 发布

    原文: Announcing .NET Core 3.0 Release Candidate 1 今天,我们宣布推出 .NET Core 3.0 Release Candidate 1.就像 Prev ...

  9. [重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分

    原文出处:[重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分 http://www.dotblogs.com.tw/mis2000lab/archive/2015/ ...

  10. man ssh翻译(ssh命令中文手册)

    本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1)                    BSD Ge ...

随机推荐

  1. php实现调整数组顺序使奇数位于偶数前面

    php实现调整数组顺序使奇数位于偶数前面 一.总结 1.array_push()两个参数,$arr在前 2.array_merge()的返回值是数组   二.php实现调整数组顺序使奇数位于偶数前面 ...

  2. Spring-boot更改成war包的方式

    转载至:  https://blog.csdn.net/zhuwei_clark/article/details/82114102  Step1 修改启动类 Step2 修改配置文件为properti ...

  3. 【b802】火柴棒等式

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴 ...

  4. [React] Use React Context to Manage Application State Through Routes

    We’ll create a Router component that will wrap our application and manage all URL related state. We’ ...

  5. [NativeScript] Create new application and run emulator

    Install: npm i -g nativescript Create: tns create <app_name> --ng Run: tns emulate ios List al ...

  6. Qt5.4.2编译 qtpropertybrowser-2.51(从4修改到5的除错过程)

    qtpropertybrowser是一个洛基亚时代的一个产物,其实它就是QtDesigner侧栏那种样子而已.网上大部分的都只适用于Qt4,今天头脑发热想用Qt5编译一下,发觉一大堆错误,因为Qt4有 ...

  7. 编写ATL控件的简单做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 ATL并不像MFC库那样提供了很多的控件窗口类,因此要使用ATL的话需要自己去封装.封装的做法很简单.比如现在我需要一 ...

  8. leveldb学习:skiplist

    leveldb中的memtable仅仅是一个封装类,它的底层实现是一个跳表. 跳表是一种基于随机数的平衡数据结构.其它的平衡数据结构还有红黑树.AVL树.但跳表的原理比它们简单非常多.跳表有点像链表, ...

  9. Java泛型详解:<T>和Class<T>的使用。泛型类,泛型方法的详细使用实例

    一.引入 1.泛型是什么 首先告诉大家ArrayList就是泛型.那ArrayList能完成哪些想不到的功能呢?先看看下面这段代码: [java] view plain copy ArrayList& ...

  10. cordova APP 检查更新

    原文:cordova APP 检查更新 //升级程序 .factory('UpdateService', function ($rootScope, $cordovaAppVersion, $cord ...