gpt4 book ai didi

javascript - 如何使用 Prompt 停止在 formik 脏状态下的导航

转载 作者:行者123 更新时间:2023-12-05 02:48:36 30 4
gpt4 key购买 nike

我在 reactjs 项目中使用 formik,我想使用 react-router 中的 Prompt 在用户离开并丢失对其提交所做的更改。

我期望这样的东西能起作用:

<Prompt
when={formik.dirty}
message="You have unsaved changes. Are you sure you want to leave?"
/>

我的 formik block 看起来像这样:

const formik = useFormik({
initialValues: {
<values>
},
enableReinitialize: true,
validate,
onSubmit: values => {
<submit functional stuff>
}
});

我的表格是这样的:

<form id="myForm" onSubmit={formik.handleSubmit}>
<div className="row">
<div className="form-group">
<label htmlFor="name">Name</label>
<input
id="name"
type="text"
onChange={formik.handleChange}
value={formik.values.name}
className="form-control"
placeholder="Enter name"
disabled={isDisabled}
/>
{formik.errors.name ? <div className="text-danger">{formik.errors.name}</div> : null}
</div>
<div className="form-group">
<label htmlFor="subject">Subject</label>
<input
id="subject"
type="text"
onChange={formik.handleChange}
value={formik.values.subject}
className="form-control"
placeholder="Email subject"
disabled={isDisabled}
/>
{formik.errors.subject ? <div className="text-danger">{formik.errors.subject}</div> : null}
</div>
</div>
</form>

但似乎 formik.dirty 未定义或未被视为真实(尽管对表单进行了更改)。

如何正确使用 dirty 属性来触发 Prompt

最佳答案

我不确定你有什么样的设置,但我创建了一个带有路由的 PoC,它有两个用于导航的选项卡(链接),我正在使用 prompt在选项卡上 formik表单组件。

import React from "react";
import { Prompt } from "react-router-dom";
import { useFormik } from "formik";

const MyForm = () => {
const formik = useFormik({
initialValues: {
name: "",
subject: ""
},
enableReinitialize: true,
onSubmit: (values) => {
alert(JSON.stringify(values, null, 2));
},
onChange: (e) => {
console.log(e);
}
});

return (
<div>
<Prompt
when={!!formik.dirty}
message={(location) =>
`Are you sure you want to go to ${location.pathname}`
}
/>
<form id="myForm" onSubmit={formik.handleSubmit}>
<div className="row">
<div className="form-group">
<label htmlFor="name">Name</label>
<input
id="name"
type="text"
onChange={formik.handleChange}
value={formik.values.name}
className="form-control"
placeholder="Enter name"
/>
{formik.errors.name ? (
<div className="text-danger">{formik.errors.name}</div>
) : null}
</div>
<div className="form-group">
<label htmlFor="subject">Subject</label>
<input
id="subject"
type="text"
onChange={formik.handleChange}
value={formik.values.subject}
className="form-control"
placeholder="Email subject"
/>
{formik.errors.subject ? (
<div className="text-danger">{formik.errors.subject}</div>
) : null}
</div>
{formik.dirty && <button tye="submit">Save</button>}
</div>
</form>
</div>
);
};

export default MyForm;

看看this codesandbox .

关于javascript - 如何使用 Prompt 停止在 formik 脏状态下的导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64373713/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com