rc-form(翻译)
原地址:https://npm.taobao.org/package/rc-form
rc-form
React 高阶表单控制组件。
开发
npm install
npm start
open http://localhost:8000/examples/
特征
- 支持 react.js 和 react-native
- 使用 async-validator 校验字段
安装

使用
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
默认为窗体字段的第一个滚动容器(直到文档)。
注意
不要在表单组件中使用无状态功能组件: 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>
})}>
- 不能对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(翻译)的更多相关文章
- jquery.form.js(ajax表单提交)
Form插件地址: 官方网站:http://malsup.com/jQuery/form/ 翻译地址:http://www.aqee.net/docs/jquery.form.plugin/jquer ...
- 数据分析师的福音——VS 2017带来一体化的数据分析开发环境
(此文章同时发表在本人微信公众号“dotNET开发经验谈”,欢迎右边二维码来关注.) 题记:在上个月的Connect() 2016大会上,微软宣布了VS 2017 RC的发布,其中为数据分析师带来了一 ...
- sql的一般查询语句(增删改查中的查)
/*例子 判断规则 http://xxx.xxx/new.php?id=57 and 1=1 正确 http://xxx.xxx/new.php?id=57 and 1=2 错误 http://xxx ...
- 安卓系统启动脚本init.rc说明文件readme.txt翻译
本说明文件位于system/core/init/readme.txt 本文参考深入解析安卓系统一书,进行翻译,版权部分归书的作者 刘超,资深Android专家,系统架构师. 博客地址:http:// ...
- [翻译] Visual Studio 2019 RC版发布
[翻译] Visual Studio 2019 RC版发布 原文: Visual Studio 2019 Release Candidate (RC) now available 今天,我们将分享 V ...
- Android启动脚本init.rc说明文档readme.txt翻译
Android Init Language--------------------- Android初始化语言--------------------- The Android Init Langua ...
- 【翻译】利用Qt设计师窗体在运行时创建用户界面(Creating a user interface from a Qt Designer form at run-time)
利用Qt设计师窗体在运行时创建用户界面 我们利用Calculator窗体例子中创建的窗体(Form)来展示当一个应用(application)已经生成后,是可以在其运行时产生与例子中相同的用户界面. ...
- [翻译] .NET Core 3.0 RC 1 发布
原文: Announcing .NET Core 3.0 Release Candidate 1 今天,我们宣布推出 .NET Core 3.0 Release Candidate 1.就像 Prev ...
- [重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分
原文出处:[重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分 http://www.dotblogs.com.tw/mis2000lab/archive/2015/ ...
- man ssh翻译(ssh命令中文手册)
本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1) BSD Ge ...
随机推荐
- [ES7] Convert Any Function into an Asynchronous Function
Any function can be made asynchronous, including function expressions, arrow functions, and methods. ...
- PHP+Aax实现异步验证
利用Ajax技术来检测用户名是否存在的原理流程图: 最终结果截图: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...
- 前端js实现打印(导出)excel表格
产品原型: 图片.png 功能需求:点击导出考勤表格按钮,会自动下载成Excel格式 图片.png 图片.png jsp页面代码: <div class="tools"> ...
- #import </usr/include/objc/objc-class.h> not such file or directory问题的解决方法
近期在使用一些开源的demo,打开后出现这个错误,然后能够把 #import </usr/include/objc/objc-class.h> 改动为以下 #import <objc ...
- 栈溢出笔记1.9 认识SEH
从本节開始,我们就要研究一些略微高级点的话题了,如同在1.2节中看到的,Windows中为抵抗栈溢出做了非常多保护性的检查工作,编译的程序默认开启了这些保护. 假设我们不能绕过这些保护.那么我们的Sh ...
- echarts怎么使用(最最最最简单版)(本质canvas)
echarts怎么使用(最最最最简单版)(本质canvas) 一.总结 一句话总结:外部扩展插件肯定要写js啊,不然数据怎么进去,不然宽高怎么设置.本质都是canvas嵌套在页面上,比如div中. 1 ...
- VO对象通过groovy模板映射XML文件
介绍 之前写过JAVA+XSLT相关的技术博客,近期研究了一个开源工具包org.codehaus.groovy,处理VO对象和XML文件映射很方便. 简言之:将VO对象中的属性(包含Collectio ...
- RoundingMode 几个参数详解
第一版 java.math.RoundingMode 几个参数详解 java.math.RoundingMode里面有几个参数搞得我有点晕,现以个人理解对其一一进行总结: 为了能更好理解,我们可以画一 ...
- 【Qt程序】基于Qt词典开发系列<十二>呼叫讲述
我们知道,win7系统自带有讲述人,即能够机器读出当前内容,详细能够将电脑锁定.然后点击左下角的button就可以.之前在用Matlab写扫雷游戏的时候,也以前调用过讲述人来进行游戏的语音提示. 详细 ...
- javascript动态创建表格:新增、删除行和列
转载:http://www.cnblogs.com/pato/archive/2009/09/02/1559068.html 利用js来动态创建表格有两种格式,appendChild()和insert ...