在Next.js 13的app
文件夹中,我有一个默认的根布局:
import "./globals.css";
export default function RootLayout({ children }) {
return (
<html lang="en">
<head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</head>
<head />
<body>
<main>{children}</main>
</body>
</html>
);
}
现在我已经为帐户页面创建了一个帐户文件夹;我已经在那里创建了一个page.js
文件,还尝试创建一个layout
文件,以便我可以更改标题;我在YouTube上看到一个视频,他们改变它像这样的代码:
export default function RootLayout({ children }) {
return (
<html lang="en">
<head>
<title>account page</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</head>
<head />
<body>
<main>{children}</main>
</body>
</html>
);
}
这对他们很有效,但当我自己尝试时,它给了我一个错误:
1.validateDOMNesting(...): <html> cannot appear as a child of <main>.
2.You are mounting a new html component when a previous one has not first unmounted. It is an error to render more than one html component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <html> and if you need to mount a new one, ensure any previous ones have unmounted first.
也许我明白了一点,我已经使用了rootLayout,我不能再使用rootLayout。
2条答案
按热度按时间6bc51xsx1#
据我所知,您正在页面文件夹中创建第二个
RootLayout
。您必须删除因为rootLayout已经有了
html
元素,并且它呈现children
组件。这个children
组件呈现在body
元素中(你可以从chrome开发工具中确认)。现在你有了<body><html> </html></body>
结构waxmsbnn2#
在
app
目录中,根目录layout
Package 了所有嵌套的<html>
,因此,正如您所做的那样,您最终得到了两个嵌套的<html>
及其<body>
和所有内容,这是不正确的。嵌套的
layout
应该只返回可以直接进入第一个页面的{children}
部分的内容。要更改任何页面的<head>
,甚至是根页面,请考虑使用head.js
文件:head.js
特殊文件允许您为管段配置<head>
标记。正如我上面所说的,如果你只是用Create Next App命令创建一个项目,你会在根布局中看到这段带有注解的代码: