Modal对话框关闭后状态没重置怎么办?
我用React写了个Modal弹窗,点“取消”关闭后,下次打开表单内容还是上次填的,怎么清空啊?试过在onClose里设state,但好像没生效。
这是我的关键代码:
const [open, setOpen] = useState(false);
const [inputValue, setInputValue] = useState('');
const handleClose = () => {
setOpen(false);
// 这里加了也没用?
setInputValue('');
};
return (
<div>
<button onClick={() => setOpen(true)}>打开</button>
<Modal open={open} onClose={handleClose}>
<input value={inputValue} onChange={e => setInputValue(e.target.value)} />
</Modal>
</div>
);
onExited回调里:或者更暴力点直接在打开时重置:
看你用的哪个UI库,有的Modal组件关闭动画会延迟触发状态重置
最稳妥、也是最暴力的办法,是用 React 的 key 属性。只要 key 变了,React 就会认为这是一个全新的组件,直接把旧的卸载,新的挂载,所有内部状态自然全清零。别在 onClose 里跟 state 较劲了,直接上 key,简单粗暴。
你可以把 Modal 的 key 绑定到一个自增的 ID 上,每次打开弹窗的时候改一下这个 key。
代码大概这么改:
这样每次点打开,modalKey 加 1,React 就会暴力重置这个 Modal 里的所有东西,不管你表单多复杂,打开绝对是新的。这个方法屡试不爽,主题里加这种逻辑也省心。