Дынамічная перадача метададзеных з кантэнту ў NextJS

У папярэднім уроке мы навучыліся задаваць метададзеныя ў кантэнце сайта. Гэты спосаб добры, але ўжывальны не заўсёды. Справа ў тым, што метададзеныя старонкі могуць мяняцца ў залежнасці ад параметра дынамічнага роўта.

Давайце паглядзім на прыкладзе. Хай у нас ёсць файл з кантэнтам для паказу карыстальніка па яго id. Хай у гэтым файле ёсць масіў з карыстальнікамі:

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

Давайце вывядзём дадзеныя карыстальніка, які адпавядае перададзенаму параметру:

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

Перайдзем цяпер да нашай праблемы. Так як мы паказваем розных карыстальнікаў, то і метададзеныя для іх павінны быць рознымі. Мы павінны фармаваць іх дынамічна, у залежнасці ад значэння параметра.

Гэта робіцца з дапамогай спецыяльнай функцыі generateMetadata, якую мы павінны экспартаваць з нашага кампанента:

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

У гэтай функцыі нам даступныя параметры роўта:

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

Давайце будзем аддаваць патрэбныя метададзеныя ў залежнасці ад значэння параметра:

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

Зрабіце роўт, які апрацоўвае адрасы выгляду /post/:id, дзе замест :id можа быць любы лік.

Хай дадзены наступны масіў:

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() {
  
}

Зрабіце так, каб па зададзеным айдзі выводзілася верстка патрэбнага посту, а таксама ўсталёўваўся правільны тайтл і метаапісанне.