Ինչպես ստեղծել դինամիկ երթուղիներ Next.js-ում


Ավելացրեք ճկունություն ձեր երթուղիներին URL-ի արագ ստուգման միջոցով:

Դինամիկ երթուղիները էջեր են, որոնք թույլ են տալիս URL-ում օգտագործել հատուկ պարամետրեր: Դրանք հատկապես օգտակար են դինամիկ բովանդակության համար էջեր ստեղծելիս:

Բլոգի համար կարող եք օգտագործել դինամիկ երթուղի՝ բլոգի գրառումների վերնագրերի հիման վրա URL-ներ ստեղծելու համար: Այս մոտեցումն ավելի լավ է, քան յուրաքանչյուր գրառման համար էջի բաղադրիչ ստեղծելը:

Next.js-ում կարող եք դինամիկ երթուղիներ ստեղծել՝ սահմանելով երկու գործառույթ՝ getStaticProps և getStaticPaths:

Next.js-ում դինամիկ երթուղու ստեղծում

Next.js-ում դինամիկ երթուղի ստեղծելու համար էջին փակագծեր ավելացրեք: Օրինակ՝ [params].js, [slug].js կամ [id].js:

Բլոգի համար դուք կարող եք օգտագործել slug դինամիկ երթուղու համար: Այսպիսով, եթե գրառման մեջ առկա է dynamic-routes-nextjs-ը, արդյունքում URL-ը կլինի https://example.com/dynamic-routes-nextjs:

Էջերի պանակում ստեղծեք նոր ֆայլ, որը կոչվում է [slug].js և ստեղծեք Post բաղադրիչը, որն ընդունում է գրառման տվյալները որպես հենակետ:

const Post = ({ postData }) => {
  return <div>{/* content */}</div>;
};

Գրառման տվյալները Գրառմանը փոխանցելու տարբեր եղանակներ կան: Ձեր ընտրած մեթոդը կախված է նրանից, թե ինչպես եք ցանկանում էջը մատուցել: Տվյալները կառուցման ժամանակ վերցնելու համար օգտագործեք getStaticProps()-ը, իսկ պահանջի դեպքում՝ getServerSideProps():

Օգտագործելով getStaticProps՝ փոստի տվյալները ստանալու համար

Բլոգի գրառումներն այնքան էլ հաճախ չեն փոխվում, և դրանք ներբեռնելը ստեղծման ժամանակ բավական է: Այսպիսով, փոփոխեք Post բաղադրիչը՝ ներառելով getStaticProps():

import { getSinglePost } from "../../utils/posts";
 
const Post = ({ content }) => {
  return <div>{/* content */}</div>;
};
 
export const getStaticProps = async ({ params }) => {
    const post = await getSinglePost(params.slug);
    return {
      props: { ...post },
    };
  };

GetStaticProps ֆունկցիան առաջացնում է էջում ներկայացված գրառման տվյալները: Այն օգտագործում է սլագը getStaticPaths ֆունկցիայի կողմից ստեղծված ուղիներից:

Օգտագործելով getStaticPaths՝ երթուղիները բեռնելու համար

GetStaticPaths() ֆունկցիան վերադարձնում է այն էջերի ուղիները, որոնք պետք է նախապես ներկայացվեն: Փոխեք Post բաղադրիչը, որպեսզի այն ներառի.

export const getStaticPaths = async () => {
  const paths = getAllPosts().map(({ slug }) => ({ params: { slug } }));
  return {
    paths,
    fallback: false,
  };
};

GetStaticPaths-ի այս իրականացումը վերցնում է բոլոր գրառումները, որոնք պետք է ներկայացվեն և վերադարձնում է slugs-ը որպես պարամետր:

Ընդհանուր առմամբ, [slug].js-ը կունենա հետևյալ տեսքը.

import { getAllPosts, getSinglePost } from "../../utils/posts";
 
const Post = ({ content }) => {
  return <div>{content}</div>;
};
 
export const getStaticPaths = async () => {
  const paths = getAllPosts().map(({ slug }) => ({ params: { slug } }));
  return {
    paths,
    fallback: false,
  };
};
 
export const getStaticProps = async ({ params }) => {
  const post = await getSinglePost(params.slug);
 
  return {
    props: { ...post },
  };
};
 
export default Post;

Դուք պետք է միասին օգտագործեք getStaticProps() և getStaticPaths()՝ դինամիկ երթուղի ստեղծելու համար: GetStaticPaths() ֆունկցիան պետք է գեներացնի դինամիկ երթուղիները, մինչդեռ getStaticProps()-ը վերցնում է յուրաքանչյուր երթուղու ներկայացվող տվյալները:

Nested Dynamic Routes-ի ստեղծում Next.js-ում

Next.js-ում տեղադրված երթուղի ստեղծելու համար անհրաժեշտ է ստեղծել նոր թղթապանակ էջերի թղթապանակում և պահպանել դինամիկ երթուղին դրա ներսում:

Օրինակ՝ /pages/posts/dynamic-routes-nextjs ստեղծելու համար պահեք [slug].js-ը /pages/posts ներսում։

URL-ի պարամետրերի մուտքը դինամիկ երթուղիներից

Երթուղին ստեղծելուց հետո կարող եք ստանալ URL պարամետրը դինամիկ երթուղուց՝ օգտագործելով useRouter() React կեռիկը:

Էջերի համար/[slug].js ստացեք slug այսպես.

import { useRouter } from 'next/router'
 
const Post = () => {
  const router = useRouter()
  const { slug } = router.query
  return <p>Post: {slug}</p>
}
 
export default Post

Սա կցուցադրի գրառման սլագը:

Դինամիկ երթուղում getServerSideProps-ով

Օգտագործելով Next.js-ը, կարող եք տվյալներ ստանալ կառուցման ժամանակ և ստեղծել դինամիկ երթուղիներ: Դուք կարող եք օգտագործել այս գիտելիքները տարրերի ցանկից էջերը նախապես մատուցելու համար:

Եթե ցանկանում եք բեռնել տվյալներ յուրաքանչյուր հարցումից, օգտագործեք getServerSideProps-ը getStaticProps-ի փոխարեն: Նկատի ունեցեք, որ այս մոտեցումն ավելի դանդաղ է. դուք պետք է օգտագործեք այն միայն պարբերաբար փոփոխվող տվյալներ օգտագործելիս: