Zagnieżdżone layouty w NextJS

Jak wiesz, w folderze /app w pliku /layout.jsx znajduje się główny layout strony.

W razie potrzeby, jednak, w zagnieżdżonych folderach można tworzyć własne layouty. W tym przypadku treść strony będzie najpierw wstawiana do zagnieżdżonego layoutu, a następnie otrzymany wynik zostanie wstawiony do głównego layoutu.

Spróbujmy w praktyce. Niech nasz główny layout ma następujący wygląd:

app/layout.jsxexport default function RootLayout({children}) {
  return (
    <html lang="en">
      <body>
        <header>
          header
        </header>
        <main>
          {children}
        </main>
        <footer>
          footer
        </footer>
      </body>
    </html>
  );
}

Zróbmy jeszcze jeden, zagnieżdżony layout dla wszystkich treści z folderu /users:

app/users/layout.jsxexport default function UsersLayout({children}) {
  return (
    <div className="info">
      wiadomość dla wszystkich użytkowników
    </div>
    <div className="content">
      {children}
    </div>
  );
}

Jak widzisz, w tym layoucie nie podajemy podstawowych tagów strony, ponieważ są one już w naszym głównym layoucie strony.

Zróbmy również plik z treścią do pokazania użytkownika:

src/app/users/show/page.jsxexport default function User() {
  return <>
    <h1>Użytkownik</h1>
    <p>
      opis użytkownika
    </p>
  </>;
}

Po tych manipulacjach nasza struktura plików będzie wyglądać tak:

Teraz, jeśli przejdziemy pod odpowiedni URL, NextJS złoży wszystko razem i w przeglądarce otrzymamy następujący końcowy kod HTML:

html<html lang="en">
  <body>
    <header>
      header
    </header>
    <main>
      <div class="info">
        wiadomość dla wszystkich użytkowników
      </div>
      
      <h1>Użytkownik</h1>
      <p>
        opis użytkownika
      </p>
    </main>
    <footer>
      footer
    </footer>
  </body>
</html>
Задание 1

Zrób na stronie sekcję z użytkownikami i sekcję z postami. Zrób w każdej sekcji własny layout, który będzie dziedziczyć z głównego layoutu strony.