在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ react 父組件中點擊按鈕,子組件向其傳遞數(shù)據(jù)。

react 父組件中點擊按鈕,子組件向其傳遞數(shù)據(jù)。

問題:
使用的antd,定義了一個model組件和form組件,form組件作為model組件的子組件,在父組件app中,使用組件model,想要點擊submit的時候獲取到子組件的表單數(shù)據(jù)。
獲取到的表單數(shù)據(jù)怎么在submit按鈕被點擊的時候才傳遞過去?
如圖:
圖片描述

代碼:

app.tsx

<ModelComponent
    onCancel={this.visibleHandler}
    onSubmit={this.submitHandler}
    visible={this.state.infoModalVisible}
    selectedData={this.state.selectedUserInfo}
    modalType={this.state.modalType}
/>

mode.tsx

<Modal
    key={Math.random()}
    title="Edit"
    visible={this.props.visible}
    onOk={this.props.onSubmit}
    onCancel={this.props.onCancel}
    okText="Submit"
    cancelText="Cancel"
    maskClosable={false}
>
    <FormComponent
        data={this.props.selectedData}
        onSubmit={this.props.onSubmit}
    />
</Modal>

form.tsx

class FormComponent extends React.Component<FormProps> {

    componentDidMount() {
        setFormValue(this.props.data, this.props.form);
        this.props.onSubmit(this.props.form.getFieldsValue());
        // 獲取到的表單數(shù)據(jù)怎么在submit按鈕被點擊的時候才傳遞過去?
    }

    render() {
        const { form } = this.props;
        const { getFieldDecorator } = this.props.form;

        return (
            <div>
                {formItemList(this.props.data, getFieldDecorator)}
            </div>
        );
    }

}

export default Form.create<FormProps>()(FormComponent);

我現(xiàn)在這樣操作只能在組件DidMount的時候才能獲取到一次數(shù)據(jù),當點擊submit的時候會得到如下圖的Proxy的一個數(shù)據(jù)?
圖片描述

回答
編輯回答
孤星

validateFields的第二個參數(shù)就可以拿到form表單的所有屬性值
拿到數(shù)據(jù)后,直接dispatch一個effects就可以了。

給你一個login的例子

2017年7月7日 11:55
編輯回答
臭榴蓮

兩種方式供參考,1:給form層(子層)添加refs,在父層的submit事件中通過refs獲取子層實例調(diào)用validateFields等方法。2:在model層(父層)增加一個checkedstate,每次點擊submit按鈕,this.state.checked+1,然后通過props傳給form層,form層在componentWillReceiveProps監(jiān)聽this.props.checked變化,觸發(fā)validateFields獲取數(shù)據(jù),再觸發(fā)this.props.submit事件~

2017年5月24日 06:33
編輯回答
憶往昔

直接在model的onClick事件中調(diào)用form組件的validateFields方法

this.props.form.validateFields((err,value) {
    // value 就是整個表單的所有數(shù)據(jù)
})
2018年5月9日 11:42