鍍金池/ 問(wèn)答/HTML/ react antd table修改的問(wèn)題

react antd table修改的問(wèn)題

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

父組件table

// 點(diǎn)擊修改方法,把那行的數(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更新的時(shí)候 對(duì)form進(jìn)行設(shè)值

    componentWillUpdate(){
        this.initForm()
    }

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

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

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

補(bǔ)

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這個(gè)方法之后還是不行,點(diǎn)擊修改,還是看不到父組件的值,在form中顯示

可以了

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

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

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

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

2017年8月3日 10:46