Dinamikus metaadatok átadása a tartalomból a NextJS-ben

Az előző leckében megtanultuk, hogyan állíthatunk be metaadatokat a weboldal tartalmában. Ez a módszer jó, de nem mindig alkalmazható. Az a helyzet, hogy az oldal metaadatai változhatnak a dinamikus útvonal paramétereitől függően.

Nézzük meg egy példán. Tegyük fel, hogy van egy tartalomfájlunk egy felhasználó id alapján történő megjelenítéséhez. Tegyük fel, hogy ebben a fájlban van egy tömb a felhasználókkal:

app/users/[id]/page.jsxlet users = [
  'user1',
  'user2',
  'user3',
  'user4',
  'user5',
];

Jelenítsük meg annak a felhasználónak az adatait, aki a megadott paraméternek felel meg:

app/users/[id]/page.jsxexport default function User({ params }) {
  return <>
    <h1>user {params.id}</h1>
    <p>
      name: {users[params.id]}
    </p>
  </>;
}

Térjünk most át a problémánkra. Mivel különböző felhasználókat jelenítünk meg, ezért a metaadataiknak is különbözőknek kell lenniük. Dinamikusan kell őket létrehoznunk, a paraméter értékétől függően.

Ezt egy speciális generateMetadata függvénnyel tehetjük meg, amelyet exportálnunk kell a komponensünkből:

src/app/test/page.jsxexport const generateMetadata = () => {
  return {
    title: '',
    description: '',
  };
};

Ebben a függvényben hozzáférünk az útvonal paramétereihez:

src/app/test/page.jsxexport const generateMetadata = ({params}) => {
  console.log(params);
};

Adjunk vissza a megfelelő metaadatokat a paraméter értékétől függően:

src/app/test/page.jsxexport const generateMetadata = ({params}) => {
  return {
    title: `Page for user {params.id}`,
    description: `Description for user "{users[params.id]}"`,
  };
};
Задание 1

Készítsen egy útvonalat, amely kezeli az /post/:id formájú címeket, ahol a :id helyett bármilyen szám állhat.

Tegyük fel, hogy a következő tömb adott:

page.jsxlet posts = [
  {
    id: '1',
    title: 'post 1',
    desc: 'description for post 1',
    text: 'text1 text1 text1 text1 text1 text1 text1 text1',
  },
  {
    id: '2',
    title: 'post 2',
    desc: 'description for post 2',
    text: 'text2 text2 text2 text2 text2 text2 text2 text2',
  },
  {
    id: '3',
    title: 'post 3',
    desc: 'description for post 3',
    text: 'text3 text3 text3 text3 text3 text3 text3 text3',
  },
];

export default function Post() {
  
}

Úgy kell beállítani, hogy a megadott azonosító alapján a megfelelő bejegyzés HTML kimenete jelenjen meg, valamint a helyes oldalcím és meta leírás legyen beállítva.