<Link>
컴포넌트 사용하기import Link from 'next/link'
export default function Page() {
return <Link href="/dashboard">Dashboard</Link>
}
useRouter()
Hook 사용하기<Link>
컴포넌트(<a>
태그)를 사용하기 어려운 상황에서는 useRouter
를 사용하면 됨router
객체의 push
메서드를 통해 페이지를 이동해보자.import { useRouter } from 'next/router'
export default function Page() {
const router = useRouter()
return (
<button type="button" onClick={() => router.push('/dashboard')}>
Dashboard
</button>
)
}
reload()
, 페이지를 돌아가기 위한 back()
, 페이지 이동 시작/종료 이벤트를 구독하는 메서드 등이 있음.const router = useRouter()
// 호출하면 페이지가 리로드 됨
router.reload()
// 호출하면 이전 페이지로 돌아감
router.back()
// 이동 시작 시의 이벤트 구독
router.events.on('routeChangeStart', (url, {shallow}) => {
// url에는 이동 대상지의 경로를 부여할 수 있다.
// shallow는 얕은 라우팅(경로만 치환해서 이동)의 경우에는 true가 된다.
})
// 이동 완료 시의 이벤트를 구독한다.
router.events.on('routerChangeComplete', (url, {shallow}) => {
// url에는 이동 대상지의 경로를 부여할 수 있다.
// shallow는 얕은 라우팅(결로만 치환해서 이동)의 경우에는 true가 된다.
})
<Link>
컴포넌트와 useRouter()
모두 query
속성을 통해 데이터를 전달할 수 있다.<Link
href={{
pathname: '/user',
query: {
name: "문지은"
},
}}
>
Go To UserPage
</Link>
router.push({
pathname: '/user',
query: {
name: '문지은'
},
},
);
useRoute
를 이용해서 값을 전달받을 수 있다.const router = useRouter();
console.log(router.query.name) // 문지은
as
속성을 사용하면 query로 전달된 값을 url에서 숨길 수 있다.<Link
href={{
pathname: '/user',
query: {
name: "문지은"
},
}}
as="/user"
>
Go To UserPage
</Link>
router
에서는 as
를 생략하고 url만 직접 적어주면 된다.router.push({
pathname: '/user',
query: {
name: '문지은'
},
'/user'
},
);
as
속성 미사용시
as
속성 사용시
JSON.stringfy()
를 사용해서 해당 객체를 문자열로 변환하여 전달 후 전달받은 값을 다시 JSON.parse()
로 변환해주어야 한다.// 데이터 전달하기
const data = {
name: "문지은",
age: 27,
}
<Link
href={{
pathname: '/user',
query: {
detail: JSON.stringify(data),
},
}}
as="/user"
>
Go To UserPage
</Link>
// 데이터 전달 받기
const router = useRouter();
console.log(JSON.parse(router.query.detail));
/**
{
name: "문지은",
age: 27,
}
**/
References