Next.js中如何使用函数返回值动态创建路由并传参?
问题根因
代码存在两处错误,直接导致路由跳转无法拿到正确的房间ID:
- 未执行房间ID生成函数:
const param = RandomRoom是将函数本身赋值给变量,没有加()调用函数,此时param存储的是整个函数对象,并非生成的5位随机房间字符串,你在console里打印param会看到完整的函数代码,而非随机字符串。 - 动态路由参数键名不匹配:动态路由路径
/lobby/[lobbyid]要求query中对应的参数键名为lobbyid,你当前传入的键名为param,框架无法将参数映射到动态路由段,跳转后无法正确读取房间ID。
修正代码
const RandomRoom = () =>{ let romstr = ""; // 请提前确认randomchars字符数组已在当前作用域正确定义 for(let i=0; i<5; i++){ const randomElement = randomchars[Math.floor(Math.random() * randomchars.length)]; romstr += randomElement; } return romstr; } const handleSubmit = function () { return function () { if (!executed) { // 调用函数拿到生成的房间ID const roomId = RandomRoom(); executed = true; // 若socket逻辑需要房间ID,可直接传入roomId socket.emit("joinroom", { ...data1, roomId }); console.log("生成的房间ID:" + roomId); router.push({ pathname: `/lobby/[lobbyid]`, // query键名与动态路由段名保持一致 query: { lobbyid: roomId } }); // 如果是Next.js App Router环境,也可以直接拼接路径,写法更简洁: // router.push(`/lobby/${roomId}`) } } }()
内容的提问来源于stack exchange,提问作者no-syntax-cobol
相关产品推荐
相关产品推荐

