useRouter

useRouter kancası, İstemci Bileşenleri içindeki rotaları programlı olarak değiştirmenize olanak tanır.

Öneri: useRouter kullanmak için özel bir gereksiniminiz olmadığı sürece gezinme için <Link> bileşenini kullanın.

app/example-client-component.tsx
'use client'
 
import { useRouter } from 'next/navigation'
 
export default function Page() {
  const router = useRouter()
 
  return (
    <button type="button" onClick={() => router.push('/dashboard')}>
      Dashboard
    </button>
  )
}

useRouter()

Bildiğim iyi oldu:

  • <Link> bileşeni, görüntü alanında görünür hale geldiklerinde rotaları otomatik olarak önceden getirir.
  • refresh() getirme istekleri önbelleğe alınırsa aynı sonucu yeniden üretebilir. cookies ve headers gibi diğer dinamik işlevler de yanıtı değiştirebilir.

Migrating from next/router

Geçiş kılavuzunun tamamını görüntüleyin.

Examples

Router events

usePathname ve useSearchParams gibi diğer İstemci Bileşeni kancalarını oluşturarak sayfa değişikliklerini dinleyebilirsiniz.

app/components/navigation-events.js
'use client'
 
import { useEffect } from 'react'
import { usePathname, useSearchParams } from 'next/navigation'
 
export function NavigationEvents() {
  const pathname = usePathname()
  const searchParams = useSearchParams()
 
  useEffect(() => {
    const url = `${pathname}?${searchParams}`
    console.log(url)
    // You can now use the current URL
    // ...
  }, [pathname, searchParams])
 
  return null
}

Bu da bir düzene aktarılabilir.

app/layout.js
import { Suspense } from 'react'
import { NavigationEvents } from './components/navigation-events'
 
export default function Layout({ children }) {
  return (
    <html lang="en">
      <body>
        {children}
 
        <Suspense fallback={null}>
          <NavigationEvents />
        </Suspense>
      </body>
    </html>
  )
}

Bilmenizde fayda var: <NavigationEvents>, Suspense sınırına sarılmıştır çünküuseSearchParams()statik oluşturma sırasında en yakın Suspense sınırına kadar istemci tarafı oluşturmaya neden olur. Daha fazla bilgi edinin.

Disabling scroll restoration

Next.js, varsayılan olarak yeni bir rotaya giderken sayfanın en üstüne kaydırma yapar. Bu davranışı scroll: false adresini router.push() veya router.replace() olarak değiştirerek devre dışı bırakabilirsiniz.

app/example-client-component.tsx
'use client'
 
import { useRouter } from 'next/navigation'
 
export default function Page() {
  const router = useRouter()
 
  return (
    <button
      type="button"
      onClick={() => router.push('/dashboard', { scroll: false })}
    >
      Dashboard
    </button>
  )
}

Version History

VersionChanges
v13.0.0useRouter from next/navigation introduced.