【发布时间】:2021-10-12 08:28:34
【问题描述】:
我正在使用 react 和 formik。
我想为电话号码设置验证。
我想为电话号码设置验证,这样如果您输入的不是数字和连字符,就会显示错误。
我创建了一个验证函数,并在其中添加了一个电话号码验证,但是每次输入一个字符时,我都会收到以下错误,并且错误不显示验证错误。
错误
36 Uncaught (in promise) TypeError: Cannot create property 'telephoneNumber' on string ''
import React from 'react';
import {Input, Form} from 'antd';
import {useParams} from 'react-router';
import {useFormik} from 'formik';
import {useCreateMutation} from 'api';
export default () => {
const {userId} = useParams<{
userId: string;
}>();
const [create, {loading}] = useCreateMutation({
onCompleted: () => {
resetForm();
},
});
const validate = (values: any) => {
const phoneValidation = /^[0-9-]+$/;
const errors: any = '';
if (values.telephoneNumber.match(phoneValidation) === null) {
errors.telephoneNumber = 'phone error';
console.log(errors);
}
return errors;
};
const formik = useFormik({
enableReinitialize: true,
initialValues: {
email: null,
telephoneNumber: null,
},
validate: validate,
onSubmit: (values) => {
create({
variables: {
uuid: userId,
attributes: values,
},
});
},
});
const {values, errors, handleChange, handleBlur, handleSubmit, resetForm} =
formik;
const validationPhone = /^0\d{1,4}-\d{1,4}-\d{3,4}$/;
return (
<Form onFinish={handleSubmit}>
<Form.Item label="e-mail">
<Input
name="email"
value={values.email}
onChange={handleChange}
onBlur={handleBlur}
/>
</Form.Item>
<Form.Item label="phone">
<Input
name="telephoneNumber"
value={values.telephoneNumber}
onChange={handleChange}
onBlur={handleBlur}
/>
<div>{errors.telephoneNumber}</div>
</Form.Item>
</Form>
);
};
【问题讨论】:
-
您将错误的默认值设置为空字符串,它应该是一个对象。
标签: reactjs typescript formik