Dinamički prenos metapodataka iz sadržaja u NextJS
U prethodnoj lekciji naučili smo da postavljamo metapodatke u sadržaju sajta. Ova metoda je dobra, ali nije uvek primenljiva. Stvar je u tome što se metapodaci stranice mogu menjati u zavisnosti od parametra dinamičke rute.
Pogledajmo na primeru.
Neka imamo fajl sa sadržajem
za prikaz korisnika po njegovom id.
Neka u ovom fajlu postoji
niz sa korisnicima:
let users = [
'user1',
'user2',
'user3',
'user4',
'user5',
];
Prikažimo podatke korisnika, koji odgovara prosleđenom parametru:
export default function User({ params }) {
return <>
<h1>user {params.id}</h1>
<p>
name: {users[params.id]}
</p>
</>;
}
Vratimo se sada na naš problem. Pošto prikazujemo različite korisnike, onda i metapodaci za njih treba da budu različiti. Moramo da ih formiramo dinamički, u zavisnosti od vrednosti parametra.
Ovo se radi pomoću posebne
funkcije generateMetadata,
koju moramo da eksportujemo
iz naše komponente:
export const generateMetadata = () => {
return {
title: '',
description: '',
};
};
U ovoj funkciji su nam dostupni parametri rute:
export const generateMetadata = ({params}) => {
console.log(params);
};
Dajmo da vraćamo potrebne metapodatke u zavisnosti od vrednosti parametra:
export const generateMetadata = ({params}) => {
return {
title: `Page for user {params.id}`,
description: `Description for user "{users[params.id]}"`,
};
};
Napravite rutu, koja obrađuje adrese
tipa /post/:id, gde umesto :id
može biti bilo koji broj.
Neka je dat sledeći niz:
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() {
}
Uredite tako da za zadati id bude prikazana verzija odgovarajućeg posta, a takođe bude postavljen ispravan naslov i meta opis.