반응형
Vue 라우터와 VueJ의 반응성
이 코드가 있어요vue-router
:
{
path: '/templates/:id/items/:itemId', component: Item,
name: 'item'
},
항목 개체에 계산된 속성이 있습니다.templateId
:
templateId() {
return parseInt(this.$route.params.id, 10);
},
문제는 url에 앵커를 추가할 때마다(링크를 클릭하여 내부)item
컴포넌트가 변경되지 않더라도 이 속성은 다시 계산됩니다.
즉, 모든 계산된 속성이templateId
다시 계산됩니다.
그러나 templateId 값은 변경되지 않습니다.
다음은 이 문제를 설명하는 매우 간단한 jsfiddle입니다.
https://jsfiddle.net/1Lgfn9qh/1/
워치 속성(호출되지 않음)을 삭제하면 콘솔에 아무것도 기록되지 않습니다.
여기서 무슨 일이 일어나고 있는지 설명해 주시겠어요?값이 갱신되지 않은 경우에도 계산된 속성이 재계산되는 이유는 무엇입니까?어떻게 하면 피할 수 있을까요?
이런 행동을 일으키는 건 사실이에요route
객체는 Vue에서 불변합니다.네비게이션에 성공하면 완전히 새로운 루트 객체가 생성되므로 계산 및 감시된 모든 속성의 재연산이 트리거됩니다.자세한 내용은 https://router.vuejs.org/api/ #the-route-object를 참조하십시오.
이 문제를 해결하려면watch
루트 오브젝트와 관련된 변경과 무관한 변경을 필터링합니다.
watch: {
'$route' (to, from) {
if(to.path != from.path) { // <- you may need to change this according to your needs!
this.relevantRoute = to
}
}
}
그런 다음 계산 및/또는 감시 속성에서 수동으로 설정된 변수를 참조합니다.
templateId() {
return parseInt(this.relevantRoute.params.id, 10);
},
언급URL : https://stackoverflow.com/questions/56414506/vue-router-and-vuejs-reactivity
반응형
'programing' 카테고리의 다른 글
vue 구성 요소의 datetimepicker 부트스트랩 값을 가져오려면 어떻게 해야 합니까? (0) | 2022.07.12 |
---|---|
Vue-Router를 사용할 때 컴포넌트 간에 데이터를 전달하는 방법 (0) | 2022.07.12 |
Java에서 객체 배열 만들기 (0) | 2022.07.12 |
왜 GCC는 거의 동일한 C코드에 대해 이렇게 근본적으로 다른 어셈블리를 생성합니까? (0) | 2022.07.12 |
오브젝트 배열 - Vue.js 생태계 내의 오브젝트를 올바르게 갱신하는 방법 (0) | 2022.07.12 |