Дынамічная перадача метададзеных з кантэнту ў NextJS
У папярэднім уроке мы навучыліся задаваць метададзеныя ў кантэнце сайта. Гэты спосаб добры, але ўжывальны не заўсёды. Справа ў тым, што метададзеныя старонкі могуць мяняцца ў залежнасці ад параметра дынамічнага роўта.
Давайце паглядзім на прыкладзе.
Хай у нас ёсць файл з кантэнтам
для паказу карыстальніка па яго id.
Хай у гэтым файле ёсць
масіў з карыстальнікамі:
let users = [
'user1',
'user2',
'user3',
'user4',
'user5',
];
Давайце вывядзём дадзеныя карыстальніка, які адпавядае перададзенаму параметру:
export default function User({ params }) {
return <>
<h1>user {params.id}</h1>
<p>
name: {users[params.id]}
</p>
</>;
}
Перайдзем цяпер да нашай праблемы. Так як мы паказваем розных карыстальнікаў, то і метададзеныя для іх павінны быць рознымі. Мы павінны фармаваць іх дынамічна, у залежнасці ад значэння параметра.
Гэта робіцца з дапамогай спецыяльнай
функцыі generateMetadata,
якую мы павінны экспартаваць
з нашага кампанента:
export const generateMetadata = () => {
return {
title: '',
description: '',
};
};
У гэтай функцыі нам даступныя параметры роўта:
export const generateMetadata = ({params}) => {
console.log(params);
};
Давайце будзем аддаваць патрэбныя метададзеныя ў залежнасці ад значэння параметра:
export const generateMetadata = ({params}) => {
return {
title: `Page for user {params.id}`,
description: `Description for user "{users[params.id]}"`,
};
};
Зрабіце роўт, які апрацоўвае адрасы
выгляду /post/:id, дзе замест :id
можа быць любы лік.
Хай дадзены наступны масіў:
let 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() {
}
Зрабіце так, каб па зададзеным айдзі выводзілася верстка патрэбнага посту, а таксама ўсталёўваўся правільны тайтл і метаапісанне.