我在一个表单(电子邮件)中有一个值,我想将它转换为小写。我在Yup中有一个可以工作的转换,但是Formik不显示小写值。
我如何使它,以便当我输入的电子邮件大写,它会自动转换为小写?
下面是我的代码:
import React from "react";
import { render } from "react-dom";
import { Formik } from "formik";
import * as Yup from "yup";
import { DisplayFormikState } from "./helper";
import "./style.css";
const validationSchema = Yup.object({
email: Yup.string()
.transform(function (value, originalvalue) {
return this.isType(value) && value !== null ? value.toLowerCase() : value;
})
.email()
.required()
.label("Email")
});
const App = () => (
<div className="app">
<Formik
initialValues={{ name: "" }}
onSubmit={() => {}}
validationSchema={validationSchema}
>
{(props) => {
const { handleBlur, handleChange, values, errors, touched } = props;
return (
<form onSubmit={props.handleSubmit}>
<h1>Email Form</h1>
<input
type="email"
name="email"
onChange={handleChange}
onBlur={handleBlur}
value={values.email}
/>
{errors.email && touched.email && errors.email}
<button type="submit">Submit</button>
<DisplayFormikState {...props} />
</form>
);
}}
</Formik>
</div>
);
render(<App />, document.getElementById("root"));
1条答案
按热度按时间3zwjbxry1#
Formik和Yup必须有两个独立的职责:
Yup不会在你的表单中设置这些值。
从Yup转换中删除大小写转换。相反,只需将该值设置为小写,并在yup进行验证之前将其传递给
setFieldValue()
。Live Demo