原地址: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. 事件处理之一:两种方式:监听器与回调 分类: H1_ANDROID 2013-10-31 10:26 3250人阅读 评论(0) 收藏

    Android组件的事件处理有2种方式: 1.基于监听器的事件处理方式:先定义组件,然后为组件设定监听器. 详见http://blog.csdn.net/jediael_lu/article/deta ...

  2. 【63.73%】【codeforces 560A】Currency System in Geraldion

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. WeakRefence

    http://183615215-qq-com.iteye.com/blog/1867568

  4. C语言数据类型取值范围解析

    版权声明:本文为博主原创文章,未经博主允许不得转载.   为什么int类型的取值范围会是-2^31 ~ 2^31-1  ,为什么要减一呢? 计算机里规定,8位二进制为一个字节,拿byte来说,一个BY ...

  5. React Native 四:图片

    一.展示图片资源  1.在ReactNative中.图片使用Image组件进行展示,以下我们就以静态.混合和网络资源等多种方式演示图片展示. 2.将图片放在代码目录img处:

  6. 使用Kotlin开发Android

    查看我的所有开源项目[开源实验室] 欢迎增加我的QQ群:[201055521],本博客client源代码下载[请点击] 摘要 我首先声明我并没有使用Kotlin非常长时间,我差点儿是在学习的同一时候写 ...

  7. [TypeScript] Simplify asynchronous callback functions using async/await

    Learn how to write a promise based delay function and then use it in async await to see how much it ...

  8. [TypeScript] Catch unsafe use of "this" in TypeScript functions

    this is probably the most tricky thing to use in JavaScript and therefore TypeScript. Fortunately th ...

  9. window对象属性alert、confirm、prompt怎么使用?

    window对象属性alert.confirm.prompt怎么使用? 一.总结 1.参数依次复杂,返回值依次复杂,但是感觉都是一一继承的,所以很好想也很好写. 二.window对象alert.con ...

  10. Android XMPP服务器, BOSH(Http-Binding)和WEB客户端搭建

    目标: 搭建一个XMPP服务器, 实现在web page上用javascript与自己XMPP服务器通信, 匿名登录并与任何一个XMPP(Jabber)帐户通信. (Gtalk目前尚有问题) XMPP ...