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

Next.js中按钮onClick事件执行后如何携带group_id完成路由重定向

Next.js 创建群组后跳转功能修复方案

1. 修正useRouter导入错误

你之前导入的是Next.js内部的Router类,不是用于客户端跳转的useRouter钩子,根据你使用的路由模式选择正确的导入方式:

  • 如果你用的是Pages Router(页面存放在pages/目录下):
    import { useRouter } from 'next/router'
    
  • 如果你用的是App Router(页面存放在app/目录下):
    首先需要在组件顶部添加客户端组件标识,再导入useRouter:
    'use client'
    import { useRouter } from 'next/navigation'
    

2. 解决点击两次才跳转的问题

React的setState是异步批量更新的,调用setNum后num状态不会立刻生效,所以第一次执行router.push(num)时拿到的还是初始空值,第二次点击才能拿到上一次更新后的路径。你完全不需要用state存储跳转路径,直接用插入返回的group_id拼接路径跳转即可。

3. 修正Supabase插入配置

Supabase的insert方法默认不会返回插入的行数据,需要补充调用.select()才能拿到生成的group_id,否则data会是undefined。

4. 完整修正后代码

逻辑部分代码

// 注意根据你的路由模式选择上文中对应正确的useRouter导入
const router = useRouter()
// 原用来存储跳转路径的num状态可以直接删除
const createGroup = async () => {
  const { data, error } = await supabase
    .from("chatgroups")
    .insert([
      {
        group_name: groupName,
        creator: user.email,
        description: groupDesc,
        accepted_members: user.email + " ",
        invited_members: ""
      }
    ])
    .select() // 补充这行,返回插入的行数据

  if (error) {
    console.log(error);
  } else {
    // 直接拼接你需要的目标路径,不需要经过state中转
    const targetPath = `/groups/invite_members/${data[0].group_id}`;
    router.push(targetPath);
  }
};

按钮部分代码(无需修改,保持原有逻辑即可)

<button type="button" className="bg-yellow-500 rounded px-12 py-2" onClick={()=> {
  createGroup()
}} >Insert test group</button>

内容的提问来源于stack exchange,提问作者Ryan Millares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:04