我正在尝试更新在嵌套布局中找到的页面标题。
app/docs/layout.tsx:
export const DocsLayout = ({children}:{children: React.ReactNode}) => {
return (
<>
<header>
<h2>Documentation - {/* platform goes here */}</h2>
</header>
<div>{children}</div>
</>
)
}
字符串
app/docs/Linux/page.tsx:
export const Linux = () => {
const PAGE_TITLE = "Linux";
return (
<div>Linux content</div>
)
}
型
app/docs/macos/page.tsx:
export const MacOs = () => {
const PAGE_TITLE = "MacOS";
return (
<div>MacOS content</div>
)
}
型
我不知道如何将PAGE_TITLE
从子页面传递到layout.tsx
中的头部,所以我最终使用URL路径名来检查每个页面并相应地更新h2
。
app/docs/layout.tsx:
export const DocsLayout = ({children}:{children: React.ReactNode}) => {
const pathname = usePathname();
const [platform, setPlatform] = useState("Linux");
if (pathname === "/docs/linux") {
setPlatform("Linux");
}
else if (pathname === "/docs/macos") {
setPlatform("MacOS");
}
return (
<>
<header>
<h2>Documentation - {platform}</h2>
</header>
<div>{children}</div>
</>
)
}
型
我知道这不是理想的方法。有人能帮我用“正确”的方法解决这个问题吗?
1条答案
按热度按时间mspsb9vt1#
你可以使用React Context。这将给你给予更多的灵活性,避免依赖URL路径名。
定义一个保存当前页面标题的新上下文。修改
DocsLayout
组件以提供上下文值。然后更新要使用的子页面并设置上下文值。创建页面标题上下文:
字符串
更新DocsLayout以提供上下文:
型
子页面中的连接上下文:
型