starMagichat
@starMagichat

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

next.jsでダイナミックルーティングをする際、URLの受け取り方

Q&A

Closed

解決したいこと

URLの入力でURLの情報を文字列型で受け取るにはどうすればいいのかお聞きしたいです。
例えば
http://localhost:3000/dynamicid/omochi
のような場合は
console.logなどから
'omochi'
をなんとかして出力したいという意味です。

該当するソースコード

project/dynamicid/[slug]    ディレクトリです。

'use client'
import React from 'react'
import Header from '../../components/Header'
import { useRouter } from 'next/navigation'

const page = () => {
    const router = useRouter()
    console.log(router)



    return (
        <>
            <Header />
            <p>Post</p>


        </>
    )
}

export default page


appフォルダの中身はこのような形です。
image.png

自分で試したこと

やってみたこととして

console.log(router)

でURLの情報を取得しようと試みましたが、そのURLの情報で検証の検索をかけてみましたが、
どこにもそのURLの情報が見つからないという状態です。
image.png

前提情報

OS

Mac 14.4.1

Next.js ver

14.2.3
一応間違えないようにpackage.jsonのコードも載せておきます

{
  "name": "project",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "react": "^18",
    "react-dom": "^18",
    "next": "14.2.3"
  },
  "devDependencies": {
    "typescript": "^5",
    "@types/node": "^20",
    "@types/react": "^18",
    "@types/react-dom": "^18",
    "postcss": "^8",
    "tailwindcss": "^3.4.1",
    "eslint": "^8",
    "eslint-config-next": "14.2.3"
  }
}

また他にも情報が必要でしたら、教えていただければ、お伝えいたします。
お時間ありましたら、皆様のお力添えいただけると助かります。m(_ _)m

0

3Answer

Comments

  1. @starMagichat

    Questioner

    回答ありがとうございます。

    'use client'
    import React from 'react'
    import Header from '../../components/Header'
    import { useRouter } from 'next/navigation'
    import { usePathname } from 'next/navigation'
    import { useState } from 'react'
    
    export default function Page({ params }: { params: { slug: string } }) {
        const pathname = usePathname()
    
    
    
        return (
            <>
    
                <div>My Post: {params.slug}</div>
                <p>Current pathname: {pathname}</p>
            </>
        )
    }
    
    
    
    
    

    と記述したら無事
    image.png
    このような形でできました。(Current pathname:の横がホームルートからのURL)
    よく使うHooksの形でURLを取得できるのは便利ですね。
    ありがとうございますm(_ _)m

    あと
    https://nextjs.org/docs/pages/building-your-application/routing/dynamic-routes
    このようなページを見たりしましたが、よくわからず詰まってしまったりしたので。
    もしよろしければ、情報の探し方のコツなどを教えてもらえると助かります。

  2. まず Next.js の Router には古い Pages Router と新しい App Router があり、見るべきは新しい方です。引数の params から slug を取り出すやり方は↓に書いてあります。

    usePathname() については useRouter() のページに書いてあります。

    探し方ですが、ドキュメントで useRouter() の説明や返り値の型を見て取り出せないか探す過程で同じページの usePathname() を見つけました。

    もしそれで見つかっていなければ 「Next.js 14 get pathname」でググって issue や Stack Overflow を読んでいたと思います。他の誰かも悩んでいそうなことなので。

  3. @starMagichat

    Questioner

    確かにverが古くて、自分が使っているものと違うとエラーをだったり、動かないこととかがありますものね、issueやStack Over flowなども先人の人がわからなければ使えそうですものね、勉強になります。
    ありがとうございます( ・∇・)

v14.2のドキュメントには次のように記載がありますが、この方法で取得できますか?

For example, a blog could include the following route app/blog/[slug]/page.js where [slug] is the Dynamic Segment for blog posts.

export default function Page({ params }: { params: { slug: string } }) {
  return <div>My Post: {params.slug}</div>
}

0Like

Comments

  1. @starMagichat

    Questioner

    回答ありがとうございます。

    'use client'
    import React from 'react'
    import Header from '../../components/Header'
    import { useRouter } from 'next/navigation'
    import { usePathname } from 'next/navigation'
    import { useState } from 'react'
    
    export default function Page({ params }: { params: { slug: string } }) {
        const pathname = usePathname()
    
    
    
        return (
            <>
    
                <div>My Post: {params.slug}</div>
                <p>Current pathname: {pathname}</p>
            </>
        )
    }
    
    
    
    
    

    と記述したら無事
    image.png
    このような形でできました。(My post:の横がdynamicidからのURL)
    前ドキュメントで見たことがありましたがこのように使うものなのですね、勉強になります。

    あと
    https://nextjs.org/docs/pages/building-your-application/routing/dynamic-routes
    このようなページを見たりしましたが、よくわからず詰まってしまったりして今回の情報も見たことはあるのですが、肝心のダイナミックルーティングをしたいときに全然見つけられなかったので、
    もしよろしければ、情報の探し方のコツなどを教えてもらえると助かります。

  2. 解決したようで良かったです:grinning:

    情報の探し方のコツ

    まず公式ドキュメントを参照します。
    "Routing"や"Dynamic Routes"といった関係ありそうなキーワードがすぐに見つかったので、まずはそれを提案しました。
    (バージョンが異なるケースを考え、GitHubからv14.2のドキュメントのリンクを記載しています。この場所はStack Overflowのコメントから見つけました。)

    ライブラリなどはGitHubのissueやpull requestも検索することがありますし、コードを直接読むこともあります。

    あとは英語でキーワード検索することですね。

  3. @starMagichat

    Questioner

    公式ドキュメントは困った時に便利ですよね、
    v14.2のドキュメントのリンクを置いていただく、お心遣いもとても嬉しかったです。
    また英語で検索するというのもすごく良いですね、次困った時は試してみます。
    勉強になります。
    ありがとうございます( ・∇・)

みなさん、本当にありがとうございます。詳しい方々にまだ知らない知見をもらえ
さらに成長できそうです٩( 'ω' )و

0Like

Your answer might help someone💌