使用 react-hook-form 进行 react-phone-number-input 验证
react-phone-number-input validation with react-hook-form
phone-number-input](https://gitlab.com/catamphetamine/react-phone-number-input#readme) with react-hook-form 它正常工作。我想用来自 react-phone-number- 的 isValidPhoneNumber 验证 phone 号码输入,但我不知道如何使用 react-hook-form 实现。我在这里阅读了一些关于这个问题的帖子,但没有正确的答案。这是我的代码:
import { useForm, Controller } from 'react-hook-form'
import PhoneInput, { isValidPhoneNumber } from 'react-phone-number-input'
import 'react-phone-number-input/style.css'
const MyForm = () => {
const {
handleSubmit,
formState: { errors },
control,
} = useForm()
const onSubmit = (data) => {
console.log(data)
}
return (
<form onSubmit={handleSubmit(onSubmit)} className="user-info-form">
<div>
<label htmlFor="phone-input">Phone Number</label>
<Controller
name="phone-input"
control={control}
rules={{ required: true }}
render={({ field: { onChange, value } }) => (
<PhoneInput
value={value}
onChange={onChange}
defaultCountry="TH"
id="phone-input"
/>
)}
/>
{errors.phone && <p className="error-message">Invalid Phone</p>}
</div>
</form>
)
}
export default MyForm
您可以通过为控制器 rules
道具的 validate
键传递 isValidPhoneNumber
方法来实现此目的。
而且你也打错了。在你的 Controller
名字中是 phone-input
。因此,您必须检查 errors
对象中的 phone-input
键而不是 phone
.
请找出答案。
import React from "react";
import { useForm, Controller } from "react-hook-form";
import PhoneInput, { isValidPhoneNumber } from "react-phone-number-input";
import "react-phone-number-input/style.css";
const MyForm = () => {
const {
handleSubmit,
formState: { errors },
control
} = useForm();
const onSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onSubmit)} className="user-info-form">
<div>
<label htmlFor="phone-input">Phone Number</label>
<Controller
name="phone-input"
control={control}
rules={{
validate: (value) => isValidPhoneNumber(value)
}}
render={({ field: { onChange, value } }) => (
<PhoneInput
value={value}
onChange={onChange}
defaultCountry="TH"
id="phone-input"
/>
)}
/>
{errors["phone-input"] && (
<p className="error-message">Invalid Phone</p>
)}
</div>
</form>
);
};
export default MyForm;
phone-number-input](https://gitlab.com/catamphetamine/react-phone-number-input#readme) with react-hook-form 它正常工作。我想用来自 react-phone-number- 的 isValidPhoneNumber 验证 phone 号码输入,但我不知道如何使用 react-hook-form 实现。我在这里阅读了一些关于这个问题的帖子,但没有正确的答案。这是我的代码:
import { useForm, Controller } from 'react-hook-form'
import PhoneInput, { isValidPhoneNumber } from 'react-phone-number-input'
import 'react-phone-number-input/style.css'
const MyForm = () => {
const {
handleSubmit,
formState: { errors },
control,
} = useForm()
const onSubmit = (data) => {
console.log(data)
}
return (
<form onSubmit={handleSubmit(onSubmit)} className="user-info-form">
<div>
<label htmlFor="phone-input">Phone Number</label>
<Controller
name="phone-input"
control={control}
rules={{ required: true }}
render={({ field: { onChange, value } }) => (
<PhoneInput
value={value}
onChange={onChange}
defaultCountry="TH"
id="phone-input"
/>
)}
/>
{errors.phone && <p className="error-message">Invalid Phone</p>}
</div>
</form>
)
}
export default MyForm
您可以通过为控制器 rules
道具的 validate
键传递 isValidPhoneNumber
方法来实现此目的。
而且你也打错了。在你的 Controller
名字中是 phone-input
。因此,您必须检查 errors
对象中的 phone-input
键而不是 phone
.
请找出答案。
import React from "react";
import { useForm, Controller } from "react-hook-form";
import PhoneInput, { isValidPhoneNumber } from "react-phone-number-input";
import "react-phone-number-input/style.css";
const MyForm = () => {
const {
handleSubmit,
formState: { errors },
control
} = useForm();
const onSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onSubmit)} className="user-info-form">
<div>
<label htmlFor="phone-input">Phone Number</label>
<Controller
name="phone-input"
control={control}
rules={{
validate: (value) => isValidPhoneNumber(value)
}}
render={({ field: { onChange, value } }) => (
<PhoneInput
value={value}
onChange={onChange}
defaultCountry="TH"
id="phone-input"
/>
)}
/>
{errors["phone-input"] && (
<p className="error-message">Invalid Phone</p>
)}
</div>
</form>
);
};
export default MyForm;