Dynamiske ruter er sider som lar deg bruke egendefinerte parametere i en URL. De er spesielt nyttige når du lager sider for dynamisk innhold.

For en blogg kan du bruke en dynamisk rute for å lage URL-er basert på titlene på blogginnleggene. Denne tilnærmingen er bedre enn å lage en sidekomponent for hvert innlegg.

Du kan lage dynamiske ruter i Next.js ved å definere to funksjoner: getStaticProps og getStaticPaths.

Opprette en dynamisk rute i Next.js

For å lage en dynamisk rute i Next.js, legg til parenteser på en side. For eksempel, [params].js, [slug].js eller [id].js.

For en blogg kan du bruke en snegle for den dynamiske ruten. Så, hvis et innlegg hadde slug dynamic-routes-nextjs, vil den resulterende nettadressen være https://example.com/dynamic-routes-nextjs.

I pages-mappen oppretter du en ny fil kalt [slug].js og oppretter Post-komponenten som tar postdataene som en prop.

konst Post = ({ postData }) => {
komme tilbake <div>{/* innhold */}</div>;
};

Det er forskjellige måter du kan sende innleggsdataene til Posten. Metoden du velger avhenger av hvordan du vil gjengi siden. For å hente dataene under byggetiden, bruk getStaticProps() og for å hente dem på forespørsel, bruk getServerSideProps().

instagram viewer

Bruke getStaticProps for å hente postdata

Blogginnlegg endres ikke så ofte, og det er tilstrekkelig å hente dem på byggetidspunktet. Så, endre Post-komponenten for å inkludere getStaticProps().

import { getSinglePost } fra "../../utils/posts";

konst Innlegg = ({ innhold }) => {
komme tilbake <div>{/* innhold */}</div>;
};

eksportkonst getStaticProps = asynkron ({ params }) => {
konst innlegg = avvente getSinglePost (params.slug);
komme tilbake {
rekvisitter: { ...post },
};
};

GetStaticProps-funksjonen genererer postdataene som gjengis på siden. Den bruker slug fra banene generert av getStaticPaths-funksjonen.

Bruke getStaticPaths for å hente baner

GetStaticPaths()-funksjonen returnerer banene for sidene som skal forhåndsrenderes. Endre Post-komponenten for å inkludere den:

eksportkonst getStaticPaths = asynkron () => {
konst paths = getAllPosts().map(({ slug }) => ({ params: { mordersnegle } }));
komme tilbake {
stier,
falle tilbake: falsk,
};
};

Denne implementeringen av getStaticPaths henter alle innleggene som skal gjengis og returnerer sneglene som paramer.

Til sammen vil [slug].js se slik ut:

import { getAllPosts, getSinglePost } fra "../../utils/posts";

konst Innlegg = ({ innhold }) => {
komme tilbake <div>{innhold}</div>;
};

eksportkonst getStaticPaths = asynkron () => {
konst paths = getAllPosts().map(({ slug }) => ({ params: { mordersnegle } }));
komme tilbake {
stier,
falle tilbake: falsk,
};
};

eksportkonst getStaticProps = asynkron ({ params }) => {
konst innlegg = avvente getSinglePost (params.slug);

komme tilbake {
rekvisitter: { ...post },
};
};

eksportmisligholde Post;

Du må bruke getStaticProps() og getStaticPaths() sammen for å lage en dynamisk rute. GetStaticPaths()-funksjonen skal generere de dynamiske rutene, mens getStaticProps() henter dataene som er gjengitt på hver rute.

Opprette nestede dynamiske ruter i Next.js

For å opprette en nestet rute i Next.js, må du opprette en ny mappe i sider-mappen og lagre den dynamiske ruten i den.

For å lage /pages/posts/dynamic-routes-nextjs, lagre for eksempel [slug].js inne i /pages/posts.

Tilgang til URL-parametere fra dynamiske ruter

Etter å ha opprettet ruten, kan du hente frem URL-parameter fra den dynamiske ruten ved å bruke useRouter() Reagerkrok.

For sidene/[slug].js, få sneglen slik:

import { useRouter } fra 'neste/ruter'

konst Innlegg = () => {
konst ruter = brukRouter()
konst { slug } = router.query
komme tilbake <s>Innlegg: {slug}</s>
}

eksportmisligholde Post

Dette vil vise slug av innlegget.

Dynamisk ruting med getServerSideProps

Ved å bruke Next.js kan du hente data på byggetidspunktet og lage dynamiske ruter. Du kan bruke denne kunnskapen til å forhåndsgjengi sider fra en liste over elementer.

Hvis du vil hente data på hver forespørsel, bruk getServerSideProps i stedet for getStaticProps. Merk at denne tilnærmingen er tregere; du bør bare bruke den når du bruker regelmessig skiftende data.