React 初探之 rc-form

概述

當(dāng)使用 React 進(jìn)行一些用戶輸入的行為時揭措,我們需要拿到用戶輸入,即將輸入框設(shè)置為受控組件,這時需要使用其他的庫柑潦,我們主要使用 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);

說明:

  1. static 用法渗鬼。關(guān)鍵字 static 用于定義靜態(tài)方法,并且不能在類的實(shí)例上調(diào)用靜態(tài)方法荧琼,而應(yīng)該通過類本身調(diào)用譬胎。上述例子中定義 propTypes 屬性,不太懂命锄?堰乔??并且后面都沒有用到這個屬性的

  2. 通過 createForm()(Form) 使得組件 Formprops 上掛載了一個 form 對象脐恩,并且這個 this.props.form 對象有 getFieldProps 镐侯、 getFieldErrorvalidateFields 三個方法

  3. 直接在 input 上掛載 rc-form 的屬性即可將 input 設(shè)置為受控組件

API

createForm

getFieldProps

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

將會在可以支持 valueonChange 接口的 input 或者 inputComponent 設(shè)置 props。設(shè)置之后將會創(chuàng)建一個綁定在 input 上

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

這個 input 唯一的 name

option: Object
Option Description Type Default
option.valuePropName 組件 value 字段的屬性名稱驶冒,eg. checkbox 應(yīng)該設(shè)置為 checked String 'value'
option. getValueProps 從 value 字段中獲取組件 props (value): Object (value) => ({value})
option.initialValue 當(dāng)前組件的初始值 any -
option. normalize 返回標(biāo)準(zhǔn)化值 (value, prev, all): Object -
option.trigger 用于收集表單數(shù)據(jù)的事件 String 'onChange'
option.validateTrigger 被監(jiān)聽已驗證的事件苟翻,設(shè)置為 falsy 以僅在調(diào)用 props.validateFields 時驗證 String String[]
option.rules 驗證規(guī)則,詳情 Object[] -
option.validateFirst 是否停止驗證這個字段的第一個 error 規(guī)則 Boolean false
option.validate Object[] -
option.hidden 忽略當(dāng)前字段當(dāng)驗證或者獲取這個字段時 Boolean false
option.preserve 是否保留該值骗污,當(dāng)字段卸載并重新安裝時崇猫,該值將保持不變 Boolean false
option.getValueFromEvent 指定如何從事件中獲取值 (e): any 詳情見下面

option.getValueFromEvent 的默認(rèn)值

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邓尤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贴谎,更是在濱河造成了極大的恐慌汞扎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擅这,死亡現(xiàn)場離奇詭異澈魄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仲翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門痹扇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铛漓,“玉大人,你說我怎么就攤上這事鲫构∨ǘ瘢” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵结笨,是天一觀的道長包晰。 經(jīng)常有香客問我,道長炕吸,這世上最難降的妖魔是什么伐憾? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮赫模,結(jié)果婚禮上树肃,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑罗,他們只是感情好胸嘴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廓脆,像睡著了一般筛谚。 火紅的嫁衣襯著肌膚如雪磁玉。 梳的紋絲不亂的頭發(fā)上停忿,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音蚊伞,去河邊找鬼席赂。 笑死,一個胖子當(dāng)著我的面吹牛时迫,可吹牛的內(nèi)容都是我干的颅停。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼掠拳,長吁一口氣:“原來是場噩夢啊……” “哼癞揉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溺欧,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喊熟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姐刁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芥牌,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年聂使,在試婚紗的時候發(fā)現(xiàn)自己被綠了壁拉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谬俄。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弃理,靈堂內(nèi)的尸體忽然破棺而出溃论,到底是詐尸還是另有隱情,我是刑警寧澤痘昌,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布蔬芥,位于F島的核電站,受9級特大地震影響控汉,放射性物質(zhì)發(fā)生泄漏笔诵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一姑子、第九天 我趴在偏房一處隱蔽的房頂上張望乎婿。 院中可真熱鬧,春花似錦街佑、人聲如沸谢翎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽森逮。三九已至,卻和暖如春磁携,著一層夾襖步出監(jiān)牢的瞬間褒侧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工谊迄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闷供,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓统诺,卻偏偏與公主長得像歪脏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粮呢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容