Типичные различия между маршрутизаторами и ссылками в NextJS
Я новичок в NextJS. Я хотел бы знать типичные варианты и варианты использования между next/router и next/link.
Какой из них я должен использовать в различных сценариях? Что делает что? Например, если я хочу загрузить общие компоненты или перемещаться между страницами, которые отображаются на стороне сервера. Также в чем разница, если я вызываю страницу с обычным тегом "а" или использую ссылку / маршрутизатор для достижения того же.
import { useRouter } from 'next/router'
function ActiveLink({ children, href }) {
const router = useRouter()
const style = {
marginRight: 10,
color: router.pathname === href ? 'red' : 'black',
}
const handleClick = (e) => {
e.preventDefault()
router.push(href)
}
return (
<a href={href} onClick={handleClick} style={style}>
{children}
</a>
)
}
export default ActiveLink
import Link from 'next/link'
function Home() {
return (
<ul>
<li>
<Link href="/">
<a>Home</a>
</Link>
</li>
<li>
<Link href="/about">
<a>About Us</a>
</Link>
</li>
</ul>
)
}
export default Home
2 ответа
what is the difference if I call a page with a normal 'a' tag or use a link/router to achieve the same?
Основное отличие нормального
<a>
тег и
next/link
или же
next/router
состоит в том, что последние два используются для переходов на стороне клиента. Так что нормальный
<a>
Тег загрузит / перейдет на страницу с HTTP-запросом, в то время как маршрутизатор и ссылка загрузят страницу на стороне клиента.
Вы можете использовать
next/router
(внутри функции в вашем компоненте), когда
next/link
недостаточно, например, если вам нужно выполнить некоторые операции перед рендерингом нового компонента.
Таким образом, и маршрутизатор, и ссылка ведут себя одинаково, вы можете выбрать, в зависимости от того, что нужно делать вашему приложению, какой из них использовать.
Оба будут запускать методы выборки данных (getServerSideProps
,
getStaticProps
, и
getInitialProps
)
Ссылка - это просто абстракция для маршрутизатора, гораздо проще использовать
Link
компонент, чем создавать ссылку каждый раз вручную.