티스토리 뷰
컴포넌트에서 $route
를 사용하게 되면, 컴포넌트가 URL에 의족적이게 되어 재사용성이 떨어지게 됩니다. 이 의존성을 제거하기 위해서는 props
옵션을 사용하면 됩니다,
const User = {
template: '<div>User {{ $route.params.id }}</div>'
}
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User }
]
})
위의 코드는 $route
를 사용한 예제입니다. URL에 의존적이기 때문에 다른 URL를 가지는 컴포넌트에서 재사용하기 어렵습니다.
const User = {
props: ['id'],
template: '<div>User {{ id }}</div>'
}
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User, props: true },
// for routes with named views, you have to define the `props` option for each named view:
{
path: '/user/:id',
components: { default: User, sidebar: Sidebar },
props: { default: true, sidebar: false }
}
]
})
위의 코드는 props
옵션을 사용한 예제입니다. URL대한 의존성이 제거되기 때문에 코드 재사용이나 테스트하기 쉽습니다.
Named views를 사용할 때는 각각의 named view에 props
옵션을 설정해 주어야 합니다.
1. Boolean mode
props
에 true
를 설정하면, route.params
가 컴포넌트의 props에 설정됩니다.
2. Object mode
props
가 object가 될 수 있습니다. props
에 설정된 값은 컴포넌트의 props가 됩니다.
const router = new VueRouter({
routes: [
{ path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } }
]
})
이 모드는 정적인 props를 설정할 때 유용합니다.
3. Function mode
props
를 함수로 작성 할 수도 있습니다. route
의 값을 임의대로 컴포넌트의 props로 설정 할 수 있습니다.
const router = new VueRouter({
routes: [
{ path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) }
]
})
위의 코드를 예로 들어 이야기 하면, /search?q=vue
라는 URL로 접속하게 되면, SearchUser
컴포넌트의 props는 { query: 'vue' }
가 됩니다.props
를 함수로 만들 때 유의 사항 중 한가지는 route가 변경되었을 때 호출 되는 함수이기 때문에 이 함수에서 state를 저장하면 안된다는 것입니다.
참고
'Vue.JS' 카테고리의 다른 글
[vue-router] 네비게이션 가드 (0) | 2019.06.15 |
---|---|
[vue-router] HTML5 히스토리 모드 (0) | 2019.06.14 |
[vue-router] Redirect 와 Alias (0) | 2019.06.12 |
[vue-router] Named Routes & Views (0) | 2019.06.10 |
[vue-router] 프로그래밍 방식 네비게이션 (0) | 2019.06.09 |
댓글
공지사항
최근에 올라온 글