Неожиданное поведение при использовании Next.js нажатие маршрутизатора с объектом URL

#reactjs #next.js #next-router

#reactjs #next.js #далее -маршрутизатор

Вопрос:

Согласно Next.js документация, я могу использовать функцию router push с объектом URL для маршрутизации динамических путей, как в этом примере :

 import { useRouter } from 'next/router'

export default function ReadMore({ post }) {
  const router = useRouter()

  return (
    <span
      onClick={() => {
        router.push({
          pathname: '/post/[pid]',
          query: { pid: post.id },
        })
      }}
    >
      Click here to read more
    </span>
  )
}
  

Но, когда я пытаюсь использовать эту функцию, Next.js маршрутизатор отправляет в браузер следующее /post/[pid]?pid=1 (возьмем, к примеру, что идентификатор записи равен 1), то есть маршрутизатор не [pid] заменяет значение объекта запроса.

Кто-нибудь может мне помочь?

Ответ №1:

ReadMore — это своего рода компонент просмотра.

Когда вы запускаете router с помощью click, [pid] заменяется на post.id .

Итак, если вы использовали следующим образом, маршрутизатор переходит к http://localhost:3000/post/123

index.js

 import ReadMore from "../../components/read-more";

export default function FirstPost() {
    return (
        <>
            <ReadMore post={{id: 123}} />
        </>
    )
}
  

read-more.js

 import { useRouter } from 'next/router'

export default function ReadMore({ post }) {
  const router = useRouter()

  return (
    <span
      onClick={() => {
        router.push({
          pathname: '/post/[pid]',
          query: { pid: post.id },
        })
      }}
    >
      Click here to read more
    </span>
  )
}