강의

App Router: useRouter

choijming21 2024. 10. 7. 23:21

 Next.js 는 지속적으로 발전하는 React 기반 웹 프레임워크입니다. 최근 버전에서 라우팅 시스템에 큰 변화가 있었습니다. 이 블로그 포스트에서는 Next.js의 새로운 라우팅 시스템, 특히 useRouter의 대체제인 usePathname, useSearchParams, useParams 그리고 useRouter의 주요 메서드들에 대해서도 자세히 알아보겠습니다.

 

 

 

 

 

1. useRouter 란?

useRouter는 Next.js에서 제공하는 훅 중 하나로, 현재 페이지의 라우터 정보에 접근할 수 있게 해줍니다. 이를 통해 URL의 정보를 얻거나, 프로그래밍 방식으로 페이지 간 이동을 할 수 있습니다. 

 

⭐⭐⭐⭐⭐  

 useRouter는 오직 클라이언트 컴포넌트에서만 사용할 수 있습니다. 서버 컴포넌트에서는 redirect 함수를 사용해야 합니다.

 

 

 

 

 

 

 

 

2. useRouter 사용하기

useRouter를 사용하려면 먼저 Next.js의 next/navigation 에서 import 합니다.

import { useRouter } from 'next/navigation'

function MyComponent() {
  const router = useRouter()
  
  // router 객체 사용
}

 

 

 

 

 

 

2-1. useRouter의 주요 메서드

 

  • router.push(url, options): 새 URL로 이동합니다.
router.push('/about')

 

 

  • router.replace(url, options): 현재 히스토리 항목을 대체하며 새 URL로 이동합니다.
router.replace('/dashboard')

 

 

  • router.back(): 브라우저 히스토리에서 이전 페이지로 이동합니다.
router.back()

 

 

  • router.forward(): 브라우저 히스토리에서 다음 페이지로 이동합니다.
router.forward()

 

 

  • router.refresh(): 현재 페이지를 새로고침합니다.
router.refresh()

 

 

  • router.prefetch(url, options): 지정된 페이지를 미리 로드합니다.
router.prefetch('/products')

 

 

 

 

 

 

 

 

 

 

3. 기타 새로운 라우팅 관련 훅들

 

  • usePathname: 현재 페이지의 경로를 얻을 수 있습니다.
import { usePathname } from 'next/navigation'

function MyComponent() {
  const pathname = usePathname()
  console.log(pathname) // 예: '/blog/my-post'
}

 

 

  • useSearchParams: URL의 쿼리 파라미터에 접근할 수 있습니다.
import { useSearchParams } from 'next/navigation'

function MyComponent() {
  const searchParams = useSearchParams()
  const query = searchParams.get('query')
  console.log(query) // 예: URL이 '/search?query=nextjs'일 경우 'nextjs' 출력
}

 

 

  • useParams: 동적 라우트 파라미터에 접근할 수 있습니다.
import { useParams } from 'next/navigation'

function MyComponent() {
  const params = useParams()
  console.log(params) // 예: 경로가 '/blog/[slug]'이고 현재 URL이 '/blog/my-post'일 경우 { slug: 'my-post' } 출력
}

 

 

 

 

 

 

 

 

 

 

 

4. 실제 사용 예제

import { useRouter, useParams, useSearchParams, usePathname } from 'next/navigation'

function ProductPage() {
  const router = useRouter()
  const params = useParams()
  const searchParams = useSearchParams()
  const pathname = usePathname()

  const handleNextProduct = () => {
    const nextId = parseInt(params.id) + 1
    router.push(`/product/${nextId}`)
  }

  const handleGoBack = () => {
    router.back()
  }

  const handleRefresh = () => {
    router.refresh()
  }

  return (
    <div>
      <p>Current path: {pathname}</p>
      <p>Product ID: {params.id}</p>
      <p>Category: {searchParams.get('category')}</p>
      <button onClick={handleNextProduct}>Next Product</button>
      <button onClick={handleGoBack}>Go Back</button>
      <button onClick={handleRefresh}>Refresh</button>
    </div>
  )
}

export default ProductPage

 

이 컴포넌트는 /product/[id] 경로에 매칭되며, 현재 제품 정보를 표시하고 다음 제품으로 이동하거나, 이전 페이지로 돌아가거나, 페이지를 새로고침 하는 기능을 제공합니다.

'강의' 카테고리의 다른 글

Route Handler와 Server Action  (0) 2024.09.26
Next.js에서 사용되는 4가지 렌더링 방식  (1) 2024.09.25
TypeScript의 개념  (5) 2024.09.24
비동기 및 json-server  (0) 2024.09.10
리액트 심화 주차 필수 개념 정리(2)  (1) 2024.09.06