Kontentdən NextJS-də metadata-nın dinamik ötürülməsi
Əvvəlki dərsdə biz saytın kontentində metadata-nı təyin etməyi öyrəndik. Bu üsul yaxşıdır, amma həmişə tətbiq edilə bilməz. Məsələ ondadır ki, səhifənin metadata-sı dinamik marşrutun parametrindən asılı olaraq dəyişə bilər.
Gəlin bir nümunəyə baxaq.
Tutaq ki, bizdə onun id-ə görə
istifadəçini göstərmək üçün kontenti olan
bir fayl var.
Tutaq ki, bu faylda
istifadəçilər massivi var:
let users = [
'user1',
'user2',
'user3',
'user4',
'user5',
];
Gəlin ötürülən parametrə uyğun gələn istifadəçinin məlumatlarını çıxaraq:
export default function User({ params }) {
return <>
<h1>user {params.id}</h1>
<p>
name: {users[params.id]}
</p>
</>;
}
İndi problemimizə keçək. Biz müxtəlif istifadəçiləri göstərdiyimiz üçün, onlar üçün metadata da fərqli olmalıdır. Biz onları parametrin dəyərindən asılı olaraq, dinamik şəkildə formalaşdırmalıyıq.
Bu, komponentimizdən ixrac etməli olduğumuz
xüsusi generateMetadata funksiyası
vasitəsilə edilir:
export const generateMetadata = () => {
return {
title: '',
description: '',
};
};
Bu funksiyada bizə marşrutun parametrləri əlçatandır:
export const generateMetadata = ({params}) => {
console.log(params);
};
Gəlin parametrin dəyərindən asılı olaraq lazım olan metadata-nı qaytaraq:
export const generateMetadata = ({params}) => {
return {
title: `Page for user {params.id}`,
description: `Description for user "{users[params.id]}"`,
};
};
/post/:id formasında ünvanları emal edən
bir marşrut hazırlayın, burada :id əvəzinə
istənilən rəqəm ola bilər.
Tutaq ki, aşağıdakı massiv verilib:
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() {
}
Elə edin ki, verilmiş id-yə görə müvafiq postun verilənləri çıxarılsın, həmçinin düzgün başlıq və meta-izah təyin olunsun.