在 handleChange Typescript 中传递值
Pass Value in handleChange Typescript
我在网上看到的所有示例中,只有事件被传递到 handleChange 并且值被自动使用。但是,我收到一条错误消息,指出找不到值。如何在 handleChange 中使用值?我正在尝试在此处使用 Formik 验证表单。
export default function MyPage() {
const [isSubmitted, setIsSubmitted] = useState(false);
const [isRemoved, setIsRemoved] = useState(false);
const [removeUser] = useMutation<Response>(USER);
let submitForm = (email: string) => {
User({
variables: {
email: email,
},
})
.then(({ data }: ExecutionResult<Response>) => {
if (data !== null && data !== undefined) {
setIsRemoved(true);
}
}) };
const formik = useFormik({
initialValues:{ email: '' },
onSubmit:(values, actions) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
actions.setSubmitting(false);
}, 1000);
},
validationSchema:schema
})
const handleChange = (e: ChangeEvent<HTMLInputElement>)=>{
if (name!== null) && (value!==null){
const {name,value} = event.target;
formik.setFieldValue(name,value);
}
}
return (
<div>
<Form
onSubmit={e => {
e.preventDefault();
submitForm(formik.values.email);
}}>
<div>
<TextField
variant="outlined"
margin="normal"
id="email"
name="email"
helperText={formik.touched.email ? formik.errors.email : ''}
error={formik.touched.email && Boolean(formik.errors.email)}
label="Email"
value={formik.values.email}
//onChange={change.bind(null, 'email')}
onChange={handleChange}
/>
<CustomButton
disabled={!isValid || !formik.values.email}
text={'Remove User'}
/>
</div>
</Form>
</div>
);
}
这一行:
const {name,value} = event.target;
即使我已经在使用 if 语句检查它,我也会收到此错误:
Property 'name' does not exist on type 'EventTarget | null'.ts(2339)
您正在尝试访问尚未分配的值。首先,声明它们然后尝试访问它们。此外,您正在使用 event.target
但您需要使用 e.target
来代替,因为您已经声明了如下事件:
const handleChange = (e: ChangeEvent<HTMLInputElement>)
因此,handleChange()
函数中的代码需要更新为:
const { name,value } = e.target;
if (name && value){
formik.setFieldValue(name, value);
}
在您的 handleChange 中,您使用 (e) 作为参数,但随后您引用了 event.target。将您的参数重命名为 (event).
handleChange= (event) => {
const {name,value} = event.target;
...
}
我在网上看到的所有示例中,只有事件被传递到 handleChange 并且值被自动使用。但是,我收到一条错误消息,指出找不到值。如何在 handleChange 中使用值?我正在尝试在此处使用 Formik 验证表单。
export default function MyPage() {
const [isSubmitted, setIsSubmitted] = useState(false);
const [isRemoved, setIsRemoved] = useState(false);
const [removeUser] = useMutation<Response>(USER);
let submitForm = (email: string) => {
User({
variables: {
email: email,
},
})
.then(({ data }: ExecutionResult<Response>) => {
if (data !== null && data !== undefined) {
setIsRemoved(true);
}
}) };
const formik = useFormik({
initialValues:{ email: '' },
onSubmit:(values, actions) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
actions.setSubmitting(false);
}, 1000);
},
validationSchema:schema
})
const handleChange = (e: ChangeEvent<HTMLInputElement>)=>{
if (name!== null) && (value!==null){
const {name,value} = event.target;
formik.setFieldValue(name,value);
}
}
return (
<div>
<Form
onSubmit={e => {
e.preventDefault();
submitForm(formik.values.email);
}}>
<div>
<TextField
variant="outlined"
margin="normal"
id="email"
name="email"
helperText={formik.touched.email ? formik.errors.email : ''}
error={formik.touched.email && Boolean(formik.errors.email)}
label="Email"
value={formik.values.email}
//onChange={change.bind(null, 'email')}
onChange={handleChange}
/>
<CustomButton
disabled={!isValid || !formik.values.email}
text={'Remove User'}
/>
</div>
</Form>
</div>
);
}
这一行:
const {name,value} = event.target;
即使我已经在使用 if 语句检查它,我也会收到此错误:
Property 'name' does not exist on type 'EventTarget | null'.ts(2339)
您正在尝试访问尚未分配的值。首先,声明它们然后尝试访问它们。此外,您正在使用 event.target
但您需要使用 e.target
来代替,因为您已经声明了如下事件:
const handleChange = (e: ChangeEvent<HTMLInputElement>)
因此,handleChange()
函数中的代码需要更新为:
const { name,value } = e.target;
if (name && value){
formik.setFieldValue(name, value);
}
在您的 handleChange 中,您使用 (e) 作为参数,但随后您引用了 event.target。将您的参数重命名为 (event).
handleChange= (event) => {
const {name,value} = event.target;
...
}