在我的React应用程序中,我有一个分三步注册的过程,为了处理表单,我使用了Reaction Hook Form.Auth组件根据路由呈现特定的表单.

身份验证组件:

import { AppRoute } from "@/enums/enums.js";
import { useAppDispatch, useCallback, useLocation } from "@/hooks/hooks.js";
import { type UserSignUpBasicRequestDto } from "#/users/users.js";
import { actions as authActions } from "~/slices/auth/auth.js";

import {
  AuthLayout,
  SignInForm,
  SignUpAdditionalInfoForm,
  SignUpBasicForm,
  SignUpInterestsForm
} from "./libs/components/components.js";

const Auth: React.FC = () => {
  const dispatch = useAppDispatch();
  const { pathname } = useLocation();

  const handleSignInSubmit = useCallback((): void => {}, []);

  const handleSignUpSubmit = useCallback((): void => {}, []);

  const getLayout = (path: string): React.ReactNode => {
    switch (path) {
      case AppRoute.SIGN_IN: {
        return <SignInForm onSubmit={handleSignInSubmit} />;
      }
      case AppRoute.SIGN_UP: {
        return <SignUpBasicForm onSubmit={handleSignUpSubmit} />;
      }
      case AppRoute.SIGN_UP_ADDITIONAL_INFO: {
        return <SignUpAdditionalInfoForm onSubmit={handleSignUpSubmit} />;
      }
      case AppRoute.SIGN_UP_INTERESTS: {
        return <SignUpInterestsForm onSubmit={handleSignUpSubmit} />;
      }
    }

    return null;
  };

  return (
    <>
      <AuthLayout>{getLayout(pathname)}</AuthLayout>
    </>
  );
};

export { Auth };

我认为处理这一过程的最好方法是将每个步骤的所有数据保存在一个州中,并将它们发送到服务器.我想出了几个解决方案:

  1. 在Auth组件中使用单个useForm挂钩,其中包含三个表单所需的所有数据.然而,在这种情况下,我需要将控制和错误等附加字段传递给所有这些表单,这可能会降低它的灵活性.
  2. 在所有表单组件中分别调用useForm挂钩,并将数据保存在本地存储中.提交表单并处理数据后,从本地存储中删除数据.
  3. 我也考虑过将数据保存在url散列中,但我认为这不是最好的主意.

哪种 Select 是最好的,有没有更好的 Select 来处理这种情况?

推荐答案

我会建议两个更新.

在所有的表单components and sync all forms with a context.中分别调用useForm钩子,这样您就可以在表单之间进行交互,比如validation and updates.

每次提交表单后,处理数据并更新上下文,如果需要,将其存储在本地存储中.

同样的情况也可以在没有上下文的情况下实现.Context would help to reduce the complexity a little bit.

Javascript相关问答推荐

以逗号分隔的列表来数组并填充收件箱列表

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

橡皮擦完全让画布变成白色

扫描qr code后出错whatter—web.js

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

为什么当我解析一个promise时,输出处于挂起状态?

CheckBox作为Vue3中的一个组件

在带有背景图像和圆形的div中添加长方体阴影时的重影线

使用原型判断对象是否为类的实例

如何将多维数组插入到另一个多维数组中?

对路由DOM嵌套路由作出react

将数组扩展到对象中

变量在导入到Vite中的另一个js文件时成为常量.

使用类型:assets资源 /资源&时,webpack的配置对象&无效

按什么顺序接收`storage`事件?

如何访问此数组中的值?

为列表中的项目设置动画

如何在AG-Grid文本字段中创建占位符

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

有没有办法通过使用不同数组中的值进行排序