{"id":267904,"date":"2022-11-11T14:01:00","date_gmt":"2022-11-11T11:01:00","guid":{"rendered":"https:\/\/howto.mediadoma.com\/?p=267904"},"modified":"2025-03-13T23:40:33","modified_gmt":"2025-03-13T20:40:33","slug":"come-creare-percorsi-dinamici-in-next-js","status":"publish","type":"post","link":"https:\/\/howto.mediadoma.com\/it\/come-creare-percorsi-dinamici-in-next-js\/","title":{"rendered":"Come creare percorsi dinamici in Next.js"},"content":{"rendered":"\n<p>I percorsi dinamici sono pagine che consentono di utilizzare parametri personalizzati in un URL. Sono particolarmente utili quando si creano pagine per contenuto dinamico.<\/p>\n<p>Per un blog, puoi utilizzare un percorso dinamico per creare URL basati sui titoli dei post del blog. Questo approccio \u00e8 migliore rispetto alla creazione di un componente di pagina per ogni post.<\/p>\n<p>Puoi creare percorsi dinamici in Next.js definendo due funzioni: getStaticProps e getStaticPaths.<\/p>\n<h2>Creazione di un percorso dinamico in Next.js<\/h2>\n<p>Per creare un percorso dinamico in Next.js, aggiungi parentesi a una pagina. Ad esempio, [params].js, [slug].js o [id].js.<\/p>\n<p>Per un blog, potresti usare uno slug per il percorso dinamico. Quindi, se un post avesse lo slug <strong>dynamic-routes-nextjs<\/strong>, l&#8217;URL risultante sarebbe <a href=\"https:\/\/example.com\/dynamic-routes-nextjs\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/example.com\/dynamic-routes-nextjs<\/a>.<\/p>\n<p>Nella cartella pages, crea un nuovo file chiamato [slug].js e crea il componente Post che prende i dati del post come prop.<\/p>\n<pre><code>const Post = ({ postData }) =&gt; {  return &lt;div&gt;{\/* content *\/}&lt;\/div&gt;;};<\/code><\/pre>\n<p>Esistono diversi modi per trasferire i dati del post al Post. Il metodo che scegli dipende da come vuoi renderizzare la pagina. Per recuperare i dati durante la fase di compilazione, utilizzare getStaticProps() e per recuperarli su richiesta, utilizzare getServerSideProps().<\/p>\n<h2>Utilizzo di getStaticProps per recuperare i dati dei post<\/h2>\n<p>I post del blog non cambiano cos\u00ec spesso ed \u00e8 sufficiente recuperarli in fase di compilazione. Quindi, modifica il componente Post per includere getStaticProps().<\/p>\n<pre><code>import { getSinglePost } from \"..\/..\/utils\/posts\"; const Post = ({ content }) =&gt; {  return &lt;div&gt;{\/* content *\/}&lt;\/div&gt;;}; export const getStaticProps = async ({ params }) =&gt; {    const post = await getSinglePost(params.slug);    return {      props: { ...post },    };  };<\/code><\/pre>\n<p>La funzione getStaticProps genera i dati dei post visualizzati nella pagina. Utilizza lo slug dei percorsi generati dalla funzione getStaticPaths.<\/p>\n<h2>Utilizzo di getStaticPaths per recuperare i percorsi<\/h2>\n<p>La funzione getStaticPaths() restituisce i percorsi per le pagine che devono essere pre-renderizzate. Modifica il componente Post per includerlo:<\/p>\n<pre><code>export const getStaticPaths = async() =&gt; {  const paths = getAllPosts().map(({ slug }) =&gt; ({ params: { slug } }));  return {    paths,    fallback: false,  };};<\/code><\/pre>\n<p>Questa implementazione di getStaticPaths recupera tutti i post di cui \u00e8 necessario eseguire il rendering e restituisce gli slug come parametri.<\/p>\n<p>Complessivamente, [slug].js sar\u00e0 simile a questo:<\/p>\n<pre><code>import { getAllPosts, getSinglePost } from \"..\/..\/utils\/posts\"; const Post = ({ content }) =&gt; {  return &lt;div&gt;{content}&lt;\/div&gt;;}; export const getStaticPaths = async() =&gt; {  const paths = getAllPosts().map(({ slug }) =&gt; ({ params: { slug } }));  return {    paths,    fallback: false,  };}; export const getStaticProps = async ({ params }) =&gt; {  const post = await getSinglePost(params.slug);   return {    props: { ...post },  };}; export default Post;<\/code><\/pre>\n<p>\u00c8 necessario utilizzare getStaticProps() e getStaticPaths() insieme per creare un percorso dinamico. La funzione getStaticPaths() dovrebbe generare i percorsi dinamici, mentre getStaticProps() recupera i dati resi a ogni percorso.<\/p>\n<h2>Creazione di percorsi dinamici nidificati in Next.js<\/h2>\n<p>Per creare un percorso nidificato in Next.js, devi creare una nuova cartella all&#8217;interno della cartella delle pagine e salvare il percorso dinamico al suo interno.<\/p>\n<p>Ad esempio, per creare \/pages\/posts\/dynamic-routes-nextjs, salva [slug].js all&#8217;interno di <strong>\/pages\/posts.<\/strong><\/p>\n<h2>Accesso ai parametri URL da percorsi dinamici<\/h2>\n<p>Dopo aver creato la route, \u00e8 possibile recuperare il <a href=\"https:\/\/www.makeuseof.com\/what-is-a-url\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">parametro URL<\/a> dalla route dinamica utilizzando l&#8217;hook useRouter() <a href=\"https:\/\/www.makeuseof.com\/react-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a>.<\/p>\n<p>Per le pagine\/[slug].js, ottieni lo slug in questo modo:<\/p>\n<pre><code>import { useRouter } from 'next\/router' const Post = () =&gt; {  const router = useRouter()  const { slug } = router.query  return &lt;p&gt;Post: {slug}&lt;\/p&gt;} export default Post<\/code><\/pre>\n<p>Questo mostrer\u00e0 lo slug del post.<\/p>\n<h2>Routing dinamico con getServerSideProps<\/h2>\n<p>Usando Next.js puoi recuperare i dati in fase di compilazione e creare percorsi dinamici. \u00c8 possibile utilizzare questa conoscenza per eseguire il pre-rendering di pagine da un elenco di elementi.<\/p>\n<p>Se vuoi recuperare i dati su ogni richiesta, usa getServerSideProps invece di getStaticProps. Si noti che questo approccio \u00e8 pi\u00f9 lento; dovresti usarlo solo quando consumi dati che cambiano regolarmente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/www.makeuseof.com\" class=\"external external_icon\">www.makeuseof.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aggiungi flessibilit\u00e0 al tuo routing con un rapido controllo degli URL.<\/p>\n","protected":false},"author":1,"featured_media":265549,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[2936],"tags":[3059],"class_list":["post-267904","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programmazione","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/267904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=267904"}],"version-history":[{"count":1,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/267904\/revisions"}],"predecessor-version":[{"id":303750,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/267904\/revisions\/303750"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/265549"}],"wp:attachment":[{"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=267904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=267904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howto.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=267904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}