atnd 3.x版本中,如何爲表單設置、綁定默認值

atnd 3.x版本中,如何爲表單設置、綁定默認值

在react的組件化開發思維,確實做到很綁,獨創的JSX語言爲一切組件皆函數提供強有力的支撐。但是,對於需要雙向數據綁定場景來說,真的是噩耗。尤其是在做表單的數據綁定。

下面介紹一下,在react+antd如何實現表單字段的數據初始值設置,數據綁定等騷操作。

getFieldDecoratorForm.create

要實現數據綁定,及初始化,getFieldDecoratorForm.create方法很重要。

getFieldDecorator是用來裝飾form中的各種輸入控件的,如:input select…,裝飾啥呢,爲毛要去裝飾這些,搞得怪怪的,想幹嘛直接對input進行設置或操作不行嗎?真的不行(至少不夠優雅,因爲你會陷入無窮無盡的事件綁定的定義及狀態修改的陷阱)

Form.create 則是用來包裹成一個form的,這TMD又不是人話,好端端的,去包裹一個<form>幹嘛?其實,簡單點來說,就是可以用Form.create來創建一個完全自定義的<form>,一般的HTML(react下的jsx)代碼被Form.create包裹了一些,那麼,這個組件就具有form的一些特性了。
但是,我們貌似對自定義<form> 沒興趣啊? 爲毛用它呢? 這是因爲,用它包裹了組件後,組件就弄直接繼承一些很有用的屬性,這些屬性是可以直接操作使用 getFieldDecorator 裝飾過的各種輸入控件的。

1) 如何使用getFieldDecorator
getFieldDecorator 可以理解爲,一個用在form表單中爲input進行數據綁定的工具或方法,antd貌似把它叫做裝飾器。怎麼使用呢,看下面:

class MyComp extends Componet{
	render(){
	const id = 'userName'
	const options = {
		initialValue: 'xiao.ming'
	}
	const { getFieldDecorator } = this.props.form
	return (
	<Form>
		{getFieldDecorator(id, options)(<Input />)}
		<Button htmlType="submit">提交</Button>
	</Form>
	}
}

1) 如何使用Form.create呢?
很簡單,直接在組件最後導出時,用Form.create執行以下就好了

export default Form.create({name: 'my-form'})(MyComp)

經過form.create後, 可以從組件props中獲取form。

經過 getFieldDecorator 包裝的控件,表單控件會自動添加 value(或 valuePropName 指定的其他屬性) onChange(或 trigger 指定的其他屬性),數據同步將被 Form 接管,這會導致以下結果:

1、’你不再需要也不應該用 onChange 來做同步,但還是可以繼續監聽 onChange 等事件。

2、你不能用控件的 value defaultValue 等屬性來設置表單域的值,默認值可以用 getFieldDecorator 裏的 initialValue。

3、你不應該用 setState,可以使用 this.props.form.setFieldsValue 來動態改變表單值。

注意:
1、getFieldDecorator 不能用於裝飾純函數組件。
2、如果使用的是 react@<15.3.0,則 getFieldDecorator 調用不能位於純函數組件中:

經過 getFieldDecorator 包裝的控件,表單控件會自動添加 value(或 valuePropName 指定的其他屬性) onChange(或 trigger 指定的其他屬性),數據同步將被 Form 接管。

上面這段話,也就是說,自定義的控件經過getFieldDecorator包裝後,會有onChange屬性,這樣自定義控件傳值是,用onChange傳入,就會改變value的值,在表單提交的時候,就可以獲取value的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章