鍍金池/ 問答/HTML/ react antd table修改的問題

react antd table修改的問題

在表格中點擊修改,彈窗一個modal,里面是一個form做修改,現(xiàn)在點擊修改傳值的時候出問題了。

父組件table

// 點擊修改方法,把那行的數(shù)據(jù)賦值給state
    handleEdit = (record: IRoleData) => {
        console.log(record)
        this.setState({
            visible: true,
            roleData: record
        })
    }
    
    // 然后將roleData poprs給子組件
        <ModalForm visible={visible} roleData={roleData} onCancel={this.handleCancel} onOk={this.handleOk}/>
    

子組件 在props更新的時候 對form進行設(shè)值

    componentWillUpdate(){
        this.initForm()
    }

    /* 如果有傳遞數(shù)據(jù)過來那么就填入form中*/
    initForm() {
        if (this.props.roleData) {
            console.log(this.props.roleData)
            this.props.form.setFieldsValue({...this.props.roleData})
        }
    }

現(xiàn)在問題是如果我這樣做的話,會報棧溢出。

我的想法是,剛開始初始化子組件的時候,由于roleData是沒有值的,如果點擊edit之后,那么roleData就有值了,這個時候子組件 props變化的生命周期中調(diào)用form的設(shè)值方法。應(yīng)該生效。但是卻出問題了。請教下是什么原因。

export default Form.create({
    mapPropsToFields: (props: IModalFormProps) => {
        if (!props.roleData) {
            return
        }
        return {
            name: Form.createFormField(props.roleData.name),
            state: Form.createFormField(props.roleData.state),
        }
    },
    onValuesChange: (props, changeValue, allValue) => {
        console.log(changeValue)
    }
})(ModalFormClass)
使用mapPropsToFieldsz這個方法之后還是不行,點擊修改,還是看不到父組件的值,在form中顯示

可以了

 name: Form.createFormField({value: props.roleData.name}),
 state: Form.createFormField({value: props.roleData.state}),
發(fā)現(xiàn)對應(yīng)的字段要和value一一的對應(yīng),大寫的尷尬
回答
編輯回答
情皺
2018年3月3日 12:36
編輯回答
骨殘心

一般溢出都是進入了死循環(huán)。

componentWillUpdate() 是當(dāng)props或者state更新時更會觸發(fā),而你這個initForm()又會再次更新props,又會再次觸發(fā)componentWillUpdate(),所以一直下去肯定溢出了。

加個判斷,把要更新的props/state 和當(dāng)前的props/state比較,不相等才initForm()

2017年8月3日 10:46