当我点击提交时,所有的字段信息都会进入浏览器的url,值不会进入后端,来自yup的错误消息也不起作用.
我try 在handleSubmit中使用vent.prebrentDefault来停止useForm中的刷新,但仍然是一样的.
import React from 'react';
import { useForm, type SubmitHandler } from 'react-hook-form';
import { type IFormData } from 'interfaces/ISession';
import { yupResolver } from '@hookform/resolvers/yup';
import * as yup from 'yup';
import { useAppDispatch } from 'redux/hooks';
import { saveEmail } from 'redux/reducers/usersSlice';
import { useSessionMutation } from 'shared/httpService';
const schema = yup
.object({
email: yup.string().email().required(),
password: yup.string().min(8).max(16).required(),
})
.required();
const Session = (): JSX.Element => {
const dispatch = useAppDispatch();
const [session] = useSessionMutation();
const {
register,
handleSubmit,
formState: { errors },
} = useForm<IFormData>({
resolver: yupResolver(schema),
});
const onSubmit: SubmitHandler<IFormData> = async ({ email, password }, event) => {
if (event !== undefined) {
event.preventDefault();
}
try {
await session({ email, password }).unwrap();
dispatch(saveEmail(email));
} catch (error) {
console.error(error);
}
};
return (
<form onSubmit={() => handleSubmit(onSubmit)}>
<input type="email" defaultValue="" {...register('email')} placeholder="email" />
<span>{errors.email?.message}</span>
<input type="password" defaultValue="" {...register('password')} placeholder="senha" />
<span>{errors.password?.message}</span>
<input type="submit" />
</form>
);
};
export default Session;
我试着使用了事件.预防默认,但仍然是一样的.