当我点击提交时,所有的字段信息都会进入浏览器的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;

我试着使用了事件.预防默认,但仍然是一样的.

推荐答案

将返回值handleSubmit本身传递给onSubmit,这样它就可以实际访问event参数.(无需手动拨打event.preventDefault().)

<form onSubmit={handleSubmit(onSubmit)}>

Javascript相关问答推荐

序列化我的数据并发送httpPost请求后,控制器收到空参数

jest使用useLocate测试自定义挂钩

使用JavaScript/PHP将二维码保存为服务器端的图像

TestCafe预计文本等于以下内容之一

如何使用CSS和JavaScript创建粘性、凝聚力的形状到形状(容器)变形?

在卡信息之间切换

在NextJS中使用计时器循环逐个打开手风琴项目?

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

使用print This时, map 容器已在LeafletJS中初始化

如何获取转换字节的所有8位?

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

防止用户在selectizeInput中取消 Select 选项

切换时排序对象数组,切换不起作用

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

确保函数签名中的类型安全:匹配值

Phaserjs-创建带有层纹理的精灵层以自定义外观

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

如何为仅有数据可用的点显示X轴标签?

Phaser3 preFX addGlow不支持zoom