【问题标题】:How to redirect after or during the onClick function of Button?如何在Button的onClick功能之后或期间重定向?
【发布时间】:2022-01-01 10:49:03
【问题描述】:

我正在尝试在我的 Next.js 网站中添加一项功能,该功能允许用户单击按钮来创建新组,然后将他们重定向到“邀请成员”页面,该页面使用动态 URL 中自动生成的 group_id路由。我目前正在使用 Next.js 的路由器,但我觉得有更好(或工作)的方式来做到这一点。 JS(export default function groups ()内):

const [num, setNum] = useState("");
const router = useRouter()
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: ""
      }
    ]);

  if (error) {
    console.log(error);
  } else {
    setNum("/groups/" + String(data[0].group_id));
    
    router.push(num);
  }
};

HTML(以相同的 JS 脚本返回):

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

我尝试将路由器用于服务器和客户端,但都无法识别 .push()

import { Router } from "next/dist/client/router";
import { Router } from "next/dist/server/router"; //neither of these recognized the method.

我的目标是执行 createGroup() 函数,其中“data”的值将接收自动生成的新 SQL 行的 int id。然后我想用这个id重定向到“/groups/[id]”,其中[id]是新的ID。我尝试使用带有const [num, setNum] 的链接,但它在设置新值之前执行重定向。我对 Next.js 比较陌生,因此我将不胜感激。

期望的输出: 单击按钮 -> 将行添加到 group_id = 17 的 SQL 表。 将用户重定向到“/groups/invite_members/17”。

编辑:我已将上面的主要 JS 代码更新为使用 useRouter(),现在它仅在每第二次点击时才有效。

【问题讨论】:

  • 设置状态是异步操作,你在router.push调用中使用的num在你第一次点击按钮时不会有你在setNum(...)设置的值。尝试将值设置为变量并在 router.push 调用中使用它,例如const path = "/groups/" + String(data[0].group_id); 然后设置状态并调用router.push(path);
  • @juliomalves 谢谢你,解决了!

标签: javascript html reactjs redirect next.js


【解决方案1】:

问题是调用setNum does not update num immediately,因为设置状态是一个异步操作。

这意味着在调用router.push(num) 时,在第一个按钮上单击num 时仍将具有其默认值(""),并且只有在第二次单击该按钮时,num 状态才会更新为之前设置的值。

要修复它,您可以将值设置为变量并在 router.push 调用中使用它。

const path = "/groups/" + String(data[0].group_id);

setNum(path);

router.push(path);

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 2020-07-21
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多