【发布时间】:2020-03-24 17:56:08
【问题描述】:
我正在使用 react-router-dom 中的提示来创建我的自定义组件,以防止用户从弹出表单中离开。
const SignUpForm = () => {
const { fields, onChange, onSubmit } = useFormState();
const isEmpty = Object.keys(fields).length === 0;
usePreventReload(!isEmpty);
const promptMessage = useMemo(() => JSON.stringify({ fields }), [fields]);
return (
<form
onSubmit={onSubmit}
noValidate
autoComplete="off"
>
<h2>Sign Up</h2>
<Prompt when={!isEmpty} message={promptMessage} />
<TextField
label="First Name"
name="firstName"
onChange={onChange}
/>
...
<Button type="submit" variant="contained" color="secondary">
Send
</Button>
</form>
);
};
如果您没有在表单中输入任何内容,则可以毫无问题地关闭弹出窗口。当您在任何字段中填写一些值然后尝试关闭弹出窗口时,您将看到一个自定义弹出窗口,其中警告您可能会丢失数据。 除了一种情况 - 页面重新加载之外,它工作得很好。为此,我使用了监听器“beforeunload”,但在这种情况下我们只能使用系统对话框。但是在这种情况下是否也可以使用自定义组件?
我创建了一个简单的演示让您更好地理解 - https://sin9k.com/custom-prompt
有人知道这种情况的解决方法吗?
【问题讨论】:
标签: javascript reactjs react-router react-router-dom