提交时如何获取Formik initialValues?
How to get Formik initialValues when submitting?
我是 Formik 的新手,不确定如何访问我的提交处理程序中的 initialValues
,以便在提交前将其与 values
进行比较。
如果有人可以在下面的基本 Formik 示例中展示这是如何完成的,我会很高兴。
const Basic = () => (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={{
firstName: '',
lastName: '',
email: '',
}}
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
// GET initialValues HERE...
alert(JSON.stringify(values, null, 2));
}}
>
<Form>
<label htmlFor="firstName">First Name</label>
<Field id="firstName" name="firstName" placeholder="Jane" />
<label htmlFor="lastName">Last Name</label>
<Field id="lastName" name="lastName" placeholder="Doe" />
<label htmlFor="email">Email</label>
<Field
id="email"
name="email"
placeholder="jane@acme.com"
type="email"
/>
<button type="submit">Submit</button>
</Form>
</Formik>
</div>
);
ReactDOM.render(<Basic />, document.getElementById('root'));
我知道有一些线程在解释如何使用 HOC 等来实现它,比如 https://medium.com/@MelkorNemesis/how-to-check-if-formik-values-have-changed-on-submit-2c6ee89992ec 但我的 React 知识很低,无法将其转化为上面的基本功能。 FWIW 我也认为将其作为 Formik 文档中的示例是有益的,这似乎是一个非常常见的用例。
您可以在组件中声明一个对象并将其传递给 Formik initialValues prop.
const Basic = () => {
const initialValues = {
firstName: '',
lastName: '',
email: '',
};
return (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={initialValues}
onSubmit={async (values) => {
// compare initialValues and values here
}}
>
<Form>
<label htmlFor="firstName">First Name</label>
<Field id="firstName" name="firstName" placeholder="Jane" />
<label htmlFor="lastName">Last Name</label>
<Field id="lastName" name="lastName" placeholder="Doe" />
<label htmlFor="email">Email</label>
<Field
id="email"
name="email"
placeholder="jane@acme.com"
type="email"
/>
<button type="submit">Submit</button>
</Form>
</Formik>
</div>
);
};
ReactDOM.render(<Basic />, document.getElementById('root'));
我是 Formik 的新手,不确定如何访问我的提交处理程序中的 initialValues
,以便在提交前将其与 values
进行比较。
如果有人可以在下面的基本 Formik 示例中展示这是如何完成的,我会很高兴。
const Basic = () => (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={{
firstName: '',
lastName: '',
email: '',
}}
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
// GET initialValues HERE...
alert(JSON.stringify(values, null, 2));
}}
>
<Form>
<label htmlFor="firstName">First Name</label>
<Field id="firstName" name="firstName" placeholder="Jane" />
<label htmlFor="lastName">Last Name</label>
<Field id="lastName" name="lastName" placeholder="Doe" />
<label htmlFor="email">Email</label>
<Field
id="email"
name="email"
placeholder="jane@acme.com"
type="email"
/>
<button type="submit">Submit</button>
</Form>
</Formik>
</div>
);
ReactDOM.render(<Basic />, document.getElementById('root'));
我知道有一些线程在解释如何使用 HOC 等来实现它,比如 https://medium.com/@MelkorNemesis/how-to-check-if-formik-values-have-changed-on-submit-2c6ee89992ec 但我的 React 知识很低,无法将其转化为上面的基本功能。 FWIW 我也认为将其作为 Formik 文档中的示例是有益的,这似乎是一个非常常见的用例。
您可以在组件中声明一个对象并将其传递给 Formik initialValues prop.
const Basic = () => {
const initialValues = {
firstName: '',
lastName: '',
email: '',
};
return (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={initialValues}
onSubmit={async (values) => {
// compare initialValues and values here
}}
>
<Form>
<label htmlFor="firstName">First Name</label>
<Field id="firstName" name="firstName" placeholder="Jane" />
<label htmlFor="lastName">Last Name</label>
<Field id="lastName" name="lastName" placeholder="Doe" />
<label htmlFor="email">Email</label>
<Field
id="email"
name="email"
placeholder="jane@acme.com"
type="email"
/>
<button type="submit">Submit</button>
</Form>
</Formik>
</div>
);
};
ReactDOM.render(<Basic />, document.getElementById('root'));