今天做一个用户管理的添加和更新功能,父组件为antd的<Modal>
,子组件为单独封装的一个UserForm组件,每次点击创建用户或者更新按钮,<Modal>
弹出时总是获取到上一次的值,
<Modal
title={user._id ? "修改用户" : "添加用户"}
visible={isShow}
onOk={this.addOrUpdateUser}
onCancel={() => {
this.form.resetFields();
this.setState({ isShow: false });
}}
okText="确定"
cancelText="取消"
>
<UserForm
setForm={(form) => (this.form = form)}
roles={roles}
user={user}
/>
</Modal>
即传递这个user对象,UserForm能拿到最新的值,但是弹框表单总是显示上一次获取的值,试过了很多办法 都没法解决,于是在github上翻 antd issues,终于找到了跟我同样问题的老哥 @wzx997,看到他提了2个issues了,十分感谢这个老哥。
官方是这样回复的
这是因为<Modal>
隐藏显示时没有销毁 Modal 里的子元素UserForm,导致都每次读取上次的值。
解决方法就很简单了,在 Modal 上增加属性 destroyOnClose
<Modal
...
destroyOnClose
>
<UserForm/>
</Modal>
有可能您的父组件不是Modal,但思路应该一样的,销毁子组件再重新渲染