Next.js - 如何隐藏404页面的导航和页脚组件?
Next.js - How to hide navigation and footer component on 404 page?
import Footer from "./Footer";
import Navigation from "./Navigation";
import { useRouter } from "next/router";
function Layout({ children }) {
const router = useRouter();
return (
<>
{router.pathname !== "/*" && <Navigation />}
{/* {router.pathname !== "*" && <Navigation />} */}
<main className="main-content">{children}</main>
{router.pathname !== "/*" && <Footer />}
{/* {router.pathname !== "*" && <Footer />} */}
</>
);
}
export default Layout;
不幸的是,带星号的方法不起作用:/ ?!?
在此先感谢您,并向大家致以最诚挚的问候 ;-)
如果您没有使用自定义 404 页面,默认 router.pathname
是 _error
所以
{router.pathname !== "/_error" && <Navigation />}
应该可以。
如果您使用自定义 404 页面(404.js inside /pages
)router.pathname
是 /404
。
如果您在页面或组件中重复使用 built in error page router.pathname
router.pathname
将是当前页面路径。
例如:
import Error from 'next/error'
const MyPage = ({isError = true})=>{
// pagepath would be something like pages/mypage
return isError ? <Error statusCode={"404"} /> : <p>My page </p>
}
export default MyPage
在这种情况下,上述两种方法都不起作用。
但是我不建议使用这种方法。
我决定添加此代码以服务其他遇到相同问题的人。在我的例子中,当我们有 custom 404 页面时,解决方案如下所示 =>
import Footer from "./Footer";
import Navigation from "./Navigation";
import { useRouter } from "next/router";
function Layout({ children }) {
const router = useRouter();
return (
<>
{router.pathname !== "/404" && <Navigation />}
<main className="main-content">{children}</main>
{router.pathname !== "/404" && <Footer />}
</>
);
}
export default Layout;
import Footer from "./Footer";
import Navigation from "./Navigation";
import { useRouter } from "next/router";
function Layout({ children }) {
const router = useRouter();
return (
<>
{router.pathname !== "/*" && <Navigation />}
{/* {router.pathname !== "*" && <Navigation />} */}
<main className="main-content">{children}</main>
{router.pathname !== "/*" && <Footer />}
{/* {router.pathname !== "*" && <Footer />} */}
</>
);
}
export default Layout;
不幸的是,带星号的方法不起作用:/ ?!?
在此先感谢您,并向大家致以最诚挚的问候 ;-)
如果您没有使用自定义 404 页面,默认 router.pathname
是 _error
所以
{router.pathname !== "/_error" && <Navigation />}
应该可以。
如果您使用自定义 404 页面(404.js inside /pages
)router.pathname
是 /404
。
如果您在页面或组件中重复使用 built in error page router.pathname
router.pathname
将是当前页面路径。
例如:
import Error from 'next/error'
const MyPage = ({isError = true})=>{
// pagepath would be something like pages/mypage
return isError ? <Error statusCode={"404"} /> : <p>My page </p>
}
export default MyPage
在这种情况下,上述两种方法都不起作用。
但是我不建议使用这种方法。
我决定添加此代码以服务其他遇到相同问题的人。在我的例子中,当我们有 custom 404 页面时,解决方案如下所示 =>
import Footer from "./Footer";
import Navigation from "./Navigation";
import { useRouter } from "next/router";
function Layout({ children }) {
const router = useRouter();
return (
<>
{router.pathname !== "/404" && <Navigation />}
<main className="main-content">{children}</main>
{router.pathname !== "/404" && <Footer />}
</>
);
}
export default Layout;