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

Next.js使用shallow routing更新多步表单URL后下一步不渲染问题

问题原因及修复方案

1. 最直接原因:onClick回调语法错误,未正确执行两个方法

你当前的onClick写法用了逗号运算符,仅会执行nextFormStep,后续的increase是函数引用未被调用,错误的语法直接导致原有步骤更新逻辑失效:

// 错误写法
onClick={() => nextFormStep(contracts?.[isSelected]), increase }

修正为用花括号包裹多个执行语句,同时调用两个方法:

// 正确写法
onClick={() => {
  nextFormStep(contracts?.[isSelected])
  increase()
}}

2. increase函数逻辑错误,步骤值计算有误

你当前写的var newStepNumber = + 1会将步骤值固定为1,无法递进,需要从当前路由query中读取现有步骤再加1:

// 修正后的increase函数
const increase = () => {
  const currentStep = Number(router.query.step || 0)
  const newStepNumber = currentStep + 1
  router.push(`/?step=${newStepNumber}`, undefined, {
    shallow: true
  })
}

3. 额外注意:表单状态需和路由参数同步

如果你的表单步骤状态是独立于路由存储的,需要添加监听逻辑,保证路由变化时同步更新表单状态,避免手动刷新页面后步骤错乱:

useEffect(() => {
  const routeStep = Number(router.query.step || 0)
  // 假设setFormStep是更新表单步骤的状态方法,根据你的实际逻辑替换
  if (routeStep !== formStep) setFormStep(routeStep)
}, [router.query.step, formStep])

内容的提问来源于stack exchange,提问作者Katharina Schreiber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:15:02