onChange 使用 Formik 验证
onChange using Formik Validation
我目前正在让我的输入值在我输入时显示在屏幕上。例如,我有一个需要名字和姓氏的表单。输入这些值后,我试图显示输入到 DOM 上的输入。这在早些时候通过 onChange 和使用 this.state.firstName、this.state.lastName 是成功的。我已经实施了 formik 验证,目前我的输入仅在我上传具有设置状态的图像后才会出现。
我有一个 onChange 传递它的值
handleChange = event => {
this.setState({ [event.target.name]: event.target.value });
};
<---->
<Formik
initialValues={this.state.formData}
enableReinitialize={true}
validationSchema={userProfileValidation}
onSubmit={this.handleSubmit}
render={formikProps => (
<div className="container-fluid">
<div className="edit-profile">
<div className="row">
<div className="col-lg-4">
<div className="card">
<div className="card-header">
<h3 className="card-title">My Profile</h3>
</div>
<div className="card-body">
<div className="row mb-2">
<div className="col-auto">
<img
className="img-90 rounded-circle"
alt=""
src={
this.state.formData.avatarUrl
? this.state.formData.avatarUrl
: "https://iupac.org/wp-
content/uploads/2018/05/default-avatar.png"
}
/>
</div>
<div className="col">
<h4 className="mb-1">
{this.state.formData.firstName} {""}{" "}
{this.state.formData.mi} {""}{" "}
{this.state.formData.lastName}{" "}
</h4>
</div>
</div>
</div>
</div>
我能够在 setState 上显示什么输入,但就像之前显示的那样。
您正在尝试混合两种不同的东西。 Formik 的存在使您不必自己管理组件级别的表单状态,这样做很困难,而 formik 会为您做到这一点。
您应该将包含表单初始字段值的对象传递给 initialValues
prop 而不是 this.state.formData
要根据某处的字段输入更新 DOM 值,您可以这样做
<Field
name="email"
type="email"
onChange={e => {
// call the built-in handleChange for formik
handleChange(e)
// and do something about e
let someValue = e.currentTarget.value
this.updateEmailField(someValue) // Update a DOM element on this function
...
}}
/>
我目前正在让我的输入值在我输入时显示在屏幕上。例如,我有一个需要名字和姓氏的表单。输入这些值后,我试图显示输入到 DOM 上的输入。这在早些时候通过 onChange 和使用 this.state.firstName、this.state.lastName 是成功的。我已经实施了 formik 验证,目前我的输入仅在我上传具有设置状态的图像后才会出现。
我有一个 onChange 传递它的值
handleChange = event => {
this.setState({ [event.target.name]: event.target.value });
};
<---->
<Formik
initialValues={this.state.formData}
enableReinitialize={true}
validationSchema={userProfileValidation}
onSubmit={this.handleSubmit}
render={formikProps => (
<div className="container-fluid">
<div className="edit-profile">
<div className="row">
<div className="col-lg-4">
<div className="card">
<div className="card-header">
<h3 className="card-title">My Profile</h3>
</div>
<div className="card-body">
<div className="row mb-2">
<div className="col-auto">
<img
className="img-90 rounded-circle"
alt=""
src={
this.state.formData.avatarUrl
? this.state.formData.avatarUrl
: "https://iupac.org/wp-
content/uploads/2018/05/default-avatar.png"
}
/>
</div>
<div className="col">
<h4 className="mb-1">
{this.state.formData.firstName} {""}{" "}
{this.state.formData.mi} {""}{" "}
{this.state.formData.lastName}{" "}
</h4>
</div>
</div>
</div>
</div>
我能够在 setState 上显示什么输入,但就像之前显示的那样。
您正在尝试混合两种不同的东西。 Formik 的存在使您不必自己管理组件级别的表单状态,这样做很困难,而 formik 会为您做到这一点。
您应该将包含表单初始字段值的对象传递给 initialValues
prop 而不是 this.state.formData
要根据某处的字段输入更新 DOM 值,您可以这样做
<Field
name="email"
type="email"
onChange={e => {
// call the built-in handleChange for formik
handleChange(e)
// and do something about e
let someValue = e.currentTarget.value
this.updateEmailField(someValue) // Update a DOM element on this function
...
}}
/>