You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js表单组件无法切换步骤的问题求助:仅动态导入(ssr:false)时正常

Next.js表单组件无法切换步骤的问题求助:仅动态导入(ssr:false)时正常

大家好,我在开发Next.js的注册流程表单时碰到了一个诡异的问题:表单的步骤切换功能完全失效,只有把组件用动态导入并设置ssr:false的方式引入时,步骤切换才能正常工作,静态导入组件就不行。

先贴一下我的核心代码:

"use client";

import { useAuthHook } from "@/context/use-auth-context";
import dynamic from "next/dynamic";
import React, { useState } from "react";
import { useFormContext } from "react-hook-form";
import SignUpForm from "./sign-up-form";

type Props = {};

// 下面这段是我之前尝试的动态导入SignUpForm的代码,当时测试下来也没解决问题
// const SignUpForm = dynamic(
//   () => import("@/components/forms/sign-up/sign-up-form"),
//   {
//     ssr: false,
//   }
// );

const OTPForm = dynamic(() => import("@/components/forms/sign-up/otp-form"), {
  ssr: false,
});

export const RegistrationFormStep = (props: Props) => {
  const {
    register,
    formState: { errors },
    setValue,
  } = useFormContext();
  const [onOTP, setOnOTP] = useState<string>("");
  const { currentStep } = useAuthHook();

  setValue("otp", onOTP);

  switch (currentStep) {
    case 1:
      return <SignUpForm errors={errors} register={register} />;
    case 2:
      return <OTPForm onOTP={onOTP} setOnOTP={setOnOTP} />;
    // 省略了其他步骤的逻辑
    default:
      return <SignUpForm errors={errors} register={register} />;
  }
};

具体的问题表现是:当我静态导入SignUpForm时,从步骤1切换到步骤2(OTPForm)后,再切回步骤1,组件不会重新渲染SignUpForm,甚至有时候步骤切换完全没反应。但只要把OTPForm改成动态导入并设置ssr:false,步骤切换就突然正常了。

我已经排查过useAuthHook里的currentStep状态,它确实在正确更新,状态值是有变化的,但组件就是不跟着切换渲染对应的表单。有没有大佬遇到过类似的情况?或者能帮我分析下为什么动态导入加ssr:false能解决这个问题,静态导入就不行呢?

麻烦各位帮忙看看,感谢!

备注:内容来源于stack exchange,提问作者Jean Mako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:49:31