使用
初學者開始可能會不清楚 Form.Item(需要設置 name 屬性) 怎么獲取子節點的值,這里說明一下:
- Form.Item 從子節點的
value
屬性值獲取,例子:input - Form.Item 設置了
getValueProps
或valuePropName
屬性,比如設置了valuePropName
={'checked'} ,則會從子節點的 checked 屬性中去獲取,例子:Switch - 如果子節點沒有
value
屬性,而且從其他屬性也無法獲取到需要發送給后端的值,怎么辦?通過onChange
方法,或trigger
屬性指定的名稱方法。由於 Form.Item 會自動向子節點傳入 props :value
屬性(或valuePropName
指定的其他屬性),onChange
方法(或 trigger 指定的其他名稱)。所以可以在子節點調用 props.onChange(value) 方法來傳遞 value 值。onChange 傳入的參數即該 Form.Item 會向后端發送的值。
官方說明
被設置了 name
屬性的 Form.Item 包裝的控件,表單控件會自動添加 value
(或 valuePropName
指定的其他屬性) onChange
(或 trigger 指定的其他屬性),數據同步將被 Form 接管,這會導致以下結果:
-
你不再需要也不應該用 onChange 來做數據收集同步(你可以使用 Form 的 onValuesChange),但還是可以繼續監聽 onChange 事件。
-
你不能用控件的 value 或 defaultValue 等屬性來設置表單域的值,默認值可以用 Form 里的 initialValues 來設置。注意 initialValues 不能被 setState 動態更新,你需要用 setFieldsValue 來更新。
-
你不應該用 setState,可以使用 form.setFieldsValue 來動態改變表單值。