当我使用layout.tsx文件在整个根级别更改样式时,它会起作用.

当我在路径级别添加layout.tsx文件时,当我在热重新加载期间进行更改时,更改就会显示出来.

但当我手动刷新页面、停止/启动应用程序或yarn build && yarn start时,样式就不再存在了.为什么?

使用Next js版本:14.2.3.

此位置的布局文件适用于所有页面的样式.

src
  app
    (main)
      page.tsx
    (auth)
      login
        page.tsx
  layout.tsx

但当我将其目标定位为如下特定路径时,样式更改仅在热重新加载期间显示一次.

src
  app
    (main)
      page.tsx
    (auth)
      login
        page.tsx
        layout.tsx // adding styles here only shows once during hot reload
      register
        page.tsx
        layout.tsx // adding styles here only shows once during hot reload
    layout.tsx // adding styles here only shows once during hot reload
  layout.tsx // for testing, no styles here now. Will work if I add styles here.

页面非常基本.

这是始终有效的根级别布局文件.

import type { Metadata } from "next";
import { Open_Sans } from "next/font/google";
import "./globals.css";
import React from "react";

const font = Open_Sans({ subsets: ["latin"] });

export const metadata: Metadata = {
  title: "App",
  description: "App description",
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="en">
      <body className={`text-3xl ${font.className}`}>{children}</body>
    </html>
  );
}

This is the layout that works once only during the first hot reload.
(I've tried copying exact above layout too, same result)

import React from "react";

const AuthLayout = ({
  children,
}: { children: React.ReactNode }) => (
  <html lang="en">
    <body className="bg-amber-400 text-center mt-4">
      {children}
    </body>
  </html>
);
export default AuthLayout

所有页面组件的内容.唯一的区别是组件的名称.

const LoginPage = () => {
    return (
        <div>
          Login
        </div>
    );
};
   
export default LoginPage;

推荐答案

嵌套布局继承上面布局文件中的布局.

/layout
/dir/layout <-- inherits the layout from /layout
/dir/subdir/layout <-- inherits the layout from /layout and /dir/layout

每个文档只能有一个HTML/head/body元素.如果包括多个实例,则生成您的多姆树时会像这样:

<html>
  <body class="...">
    <html>
       <body class="...">
       </body>
    </html>
  </body>
</html>

如果多姆树中存在多个HTML、head或body标签,浏览器会将它们组合成一个,结果可能会像您现在得到的结果一样意想不到.

请参阅the documentation on nested layouts了解更多信息,并在嵌套布局文件中使用除HTML/body或head之外的任何其他 node (例如简单的<div>).

Javascript相关问答推荐

Codemirsor 6语言包的使用部分是什么?

如何将剧作家请求对象转换为字符串,因为它只提供promise ?

如果使用React Select ,如何将CSS类添加到元素中?

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

有条件的悲剧

使用JavaScript重新排序行

在这种情况下,如何 for each 元素添加id?

自定义高图中的x轴标签序列

我的服务工作器没有连接到我的Chrome扩展中的内容脚本.我该怎么解决这个问题?

在带有背景图像和圆形的div中添加长方体阴影时的重影线

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

检索相加到点的子项

VSCode中出现随机行

如何在我的Next.js项目中.blob()我的图像文件?

AJAX POST在控制器中返回空(ASP.NET MVC)

每次重新呈现时调用useState initialValue函数

如何用javascript更改元素的宽度和高度?

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

react 路由DOM有条件地呈现元素