bounty将在10小时后过期。此问题的答案有资格获得+50声望奖励。kartikay dwivedi希望引起更多的注意这个问题。
import Link from "next/link";
import React from "react";
const Navbar = () => {
return (
<div>
<ul className="flex m-10 gap-10">
<Link href="/">
<li>Home</li>
</Link>
<Link href="/signin">
<li>SignIn</li>
</Link>
<Link href="/signup">
<li>SignUp</li>
</Link>
<Link href="/profile">
<li>Profile</li>
</Link>
</ul>
</div>
);
};
export default Navbar;
"use client";
import { sessionStatus } from "../utils/session";
import { redirect } from "next/navigation";
import React, { useEffect } from "react";
const Page = () => {
useEffect(() => {
const session = sessionStatus;
if (!session) {
console.log("hello");
redirect("/");
} else {
console.log("wow");
}
}, []);
console.log("render");
return <div>Profile page ddddd</div>;
};
export default Page;
import React from "react";
const Page = () => {
return <div>SignIn page</div>;
};
export default Page;
所以我有几个疑问,因为我是新的下一个btw会话存储是一个变量,只有这样才需要调用。1.为什么当我点击导航栏链接时整个页面都在刷新2.为什么配置文件中没有触发useeffect并且路由不受保护
2条答案
按热度按时间fv2wmkja1#
Next.js中的Link组件旨在处理客户端导航,而不会导致整个页面重新加载。它使用JavaScript拦截点击事件并执行导航,而不向服务器发出实际的HTTP请求。
要解决此问题,您应该替换 Package 在
<Link>
组件中的<li>
元素,而不是直接使用<a>
标记。下面是代码的更新版本:通过将
<a>
标签 Package 在组件中,Next.js将处理导航并防止在单击链接时重新加载整个页面。lkaoscv72#
这个JSX结构是无效的,因此导致完全重新加载。将代码改为: