业务场景
一个table,每条tr可以修改。修改就是弹出一个<Modal destroyOnClose modifyData={data}/>
,
Modal里面一个Form。这里使用setFieldsValue
进行表单回填。由于页面初始化的时候就mounted了Modal,所以componentDidMount()
就只运行了一次。
过程
所以我就分别在componentWillReceiveProps(), shouldComponentUpdate(), render(), componentDidUpdate(),
几个生命周期里调用了this.props.form.setFieldsValue(this.props.modifyData)
。
运行结果是不但弹出没打开,还造成了死循环。
问题
- 为啥会出现这种情况,文档上不是说会在componentWillReceiveProps()造成死循环么?为啥我其他生命周期里面也会?
- 使用antd的form在这种场景下表单回填的思路是什么。我的理解是,类似于VUE的
watch
,我只要知道this.props.modifyData
发生变化,然后再去执行setFieldsValue
从而动态的改变表单的值。然而react好像并没有类似watch
这样的功能,因此我就只好在生命周期里使用。(ps:发现打开和关闭modal,都会触发update的生命周期。)
不知道这样理解对不对
setFieldsValue 放在你 Modal 确定函数中执行