next.js - 使用浏览器前进按钮访问通过链接访问的页面时,选项卡卡住

标签 next.js next.js13

我有一个最小的 Next.JS 应用程序,有两个页面:主页和仪表板页面。我在所有页面的顶部都有一个导航栏,其中有一个链接到仪表板页面的链接对象。当我单击链接并到达仪表板页面时,我按浏览器后退按钮。这有效(我到达主页)。然后我按下浏览器前进按钮,打算转到仪表板页面。这里浏览器卡住了。

我在仪表板内添加了一条console.log语句,它无限地出现在控制台中,这意味着页面不断地重新加载。

为什么会出现这样的情况呢?我还注意到,如果我手动输入 localhost:3000/dashboard 而不是单击 Link 对象,则不会出现问题。

有什么想法吗?相关代码如下:

/* HOMEPAGE: app/page.js */
import React from 'react'; 
export default function LandingPage()
{
    return <div>LandingPage</div>;
};

/* DASHBOARD: app/dashboard/page.js */
"use client";
export default async function Dashboard()
{
    // This gets printed infinitely in the console
    console.log("Dashboard");

    return <div>Dashboard</div>;
}

/* APPBAR: app/components/AppBar.js */
"use client";
import Link from 'next/link';

export default function AppBar({})
{
    return (
        <nav className="mb-0 px-5 py-5 my-0 ttext-gray-800 text-center dark: bg-white flex justify-between items-left shadow-[#ccc] shadow-md z-50 relative">
            <Link href="#" className="text-xl font-bold text-gray-900">MySite</Link>
            <div>
                {/* This is the link I am clicking */}
                <Link href="/dashboard" className="text-gray-600 hover:text-gray-900 px-5">Dashboard</Link>
            </div>
        </nav>
    );
}

/* ROOT LAYOUT: app/layout.js */
import './globals.css'
import AppBar from './components/AppBar';

export default function RootLayout({ children }) {
  return (
        <html lang="en">
            <body>
                <AppBar />
                <main className="max-w mx-auto">
                {children}
                </main>
            </body>
        </html>
  );
}

我正在使用 Next.js v13.4.1。

提前致谢。

编辑:正如 @TheKritsakon 正确指出的那样,从仪表板功能中删除 async 确实解决了问题。但是,在我的实际代码中,我调用了一个异步函数(我删除了它以简化此处的示例)

最佳答案

我做了一个简单的研究,发现 babel 在引用导出为 async 的组件名称时遇到了一些问题 https://github.com/babel/babel/issues/3786 .

将组件导出为异步有一些具体原因吗?

"use client";
export default function Dashboard()
{
    // This gets printed infinitely in the console
    console.log("Dashboard");

    return <div>Dashboard</div>;
}

关于next.js - 使用浏览器前进按钮访问通过链接访问的页面时,选项卡卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76402871/

相关文章:

javascript - 下一个 : shared components between pages

reactjs - 如何在不动态导入的情况下在 next.js 中导入浏览器模块

reactjs - 在 NextJS 13.4 API 中抛出错误消息的正确方法是什么? (响应、NextAPI 响应、NextResponse)

当我将 Next.js 13 og 图像放入应用程序目录时,它不起作用

reactjs - 当我的数据在接下来的 13 年发生更改时,如何重新渲染?

reactjs - Next.js 13 : Customizing Next. 基于路由层次结构的js布局

asp.net - 使用 asp.net core visual studio react 模板部署 Next JS 项目

javascript - 无法在 React js 中获取 `props` - 下一个 js 应用程序

javascript - Next Js - Firebase 部署问题

reactjs - 如何更改 NextJS 13 中服务器操作的状态?