NextJS-de mazmunyňyzdan metamağlumatlary dinamiki geçirmek
Öňki sapakda biz saýtyň mazmunynda metamağlumatlary düzmegi öwrendik. Bu usul gowy, ýöne her wagt ulanmak mümkin däl. Sebäbi sahypanyň metamağlumatlary dynamik ýol parametrine baglylykda üýtgedip bilner.
Geliň mysal bilen göreli.
Bizde ulanyjyny onuň id boýunça görkezmek üçin mazmunly faýl bar bolsun.
Bu faýlda ulanyjylar bilen
massiw bar bolsun:
let users = [
'user1',
'user2',
'user3',
'user4',
'user5',
];
Geliň berlen parametre laýyk gelýän ulanyjynyň maglumatlaryny çykaralyň:
export default function User({ params }) {
return <>
<h1>ulanyjy {params.id}</h1>
<p>
ady: {users[params.id]}
</p>
</>;
}
Indi problemamyza geçeliň. Biz dürli ulanyjylary görkezýäňiz ýaly, olara degişli metamağlumatlar hem dürli bolmaly. Biz olary parametriň bahasyna baglylykda, dynamiki görnüşde düzmeli.
Bu ýörite
generateMetadata funksiýasy arkaly amala aşyrylýar,
ony biz öz komponentimizden eksport etmeli:
export const generateMetadata = () => {
return {
title: '',
description: '',
};
};
Bu funksiýada ýol parametrleri bize elýeter:
export const generateMetadata = ({params}) => {
console.log(params);
};
Geliň parametriň bahasyna baglylykda gerekli metamağlumatlary gaýtaryşdýralyň:
export const generateMetadata = ({params}) => {
return {
title: `Ulanyjy {params.id} üçin sahypa`,
description: `"{users[params.id]}" ulanyjysy üçin düşündiriş`,
};
};
/post/:id görnüşindeki salgylary işleýän ýol ýasaň,
:id ýerine
islenen san bolup biler.
Aşakdaky massiw berlen bolsun:
let posts = [
{
id: '1',
title: 'post 1',
desc: '1-nji post üçin düşündiriş',
text: 'tekst1 tekst1 tekst1 tekst1 tekst1 tekst1 tekst1 tekst1',
},
{
id: '2',
title: 'post 2',
desc: '2-nji post üçin düşündiriş',
text: 'tekst2 tekst2 tekst2 tekst2 tekst2 tekst2 tekst2 tekst2',
},
{
id: '3',
title: 'post 3',
desc: '3-nji post üçin düşündiriş',
text: 'tekst3 tekst3 tekst3 tekst3 tekst3 tekst3 tekst3 tekst3',
},
];
export default function Post() {
}
Berlen ID boýunça degişli postyň gurluşy çykarylýan we dogry ad we metadescription bellenen ýaly ediň.