vuex-sync의 용도는 무엇입니까?
가 vuex-router-sync
시키기 입니다.route
vuex store
는 이 사이트에 할 수 .route
음음음같 뭇매하다
store.state.route.path
store.state.route.params
나는 지만, 가 handle handle handle도 처리할 수 .route
타타에 this.$route
아, 아, 아, 아, 아, 아, 아, 아, 아, 아.
스토어에서 루트를 사용해야 하는 경우 및 vuex-router-sync가 필요한 시나리오는 무엇입니까?
을 사용하다vuex-router-sync
할 수 , 하려는 경우 할 수 .route
의 vuex
의 메서드예:this.$route
Vuex(부렉스)
예를 들어 보겠습니다.
하나의 컴포넌트에 메시지를 표시한다고 가정합니다..Have a nice day, Jack
「 」의 합니다.Welcome back, Jack
사용자의 브라우징 톱 페이지에 표시됩니다.
하면 할 수 요.vuex-router-sync
const Top = {
template: '<div>{{message}}</div>',
computed: {
message() {
return this.$store.getters.getMessage;
}
},
};
const Bar = {
template: '<div>{{message}}</div>',
computed: {
message() {
return this.$store.getters.getMessage;
}
}
};
const routes = [{
path: '/top',
component: Top,
name: 'top'
},
{
path: '/bar',
component: Bar,
name: 'bar'
},
];
const router = new VueRouter({
routes
});
const store = new Vuex.Store({
state: {
username: 'Jack',
phrases: ['Welcome back', 'Have a nice day'],
},
getters: {
getMessage(state) {
return state.route.name === 'top' ?
`${state.phrases[0]}, ${state.username}` :
`${state.phrases[1]}, ${state.username}`;
},
},
});
// sync store and router by using `vuex-router-sync`
sync(store, router);
const app = new Vue({
router,
store,
}).$mount('#app');
// vuex-router-sync source code pasted here because no proper cdn service found
function sync(store, router, options) {
var moduleName = (options || {}).moduleName || 'route'
store.registerModule(moduleName, {
namespaced: true,
state: cloneRoute(router.currentRoute),
mutations: {
'ROUTE_CHANGED': function(state, transition) {
store.state[moduleName] = cloneRoute(transition.to, transition.from)
}
}
})
var isTimeTraveling = false
var currentPath
// sync router on store change
store.watch(
function(state) {
return state[moduleName]
},
function(route) {
if (route.fullPath === currentPath) {
return
}
isTimeTraveling = true
var methodToUse = currentPath == null ?
'replace' :
'push'
currentPath = route.fullPath
router[methodToUse](route)
}, {
sync: true
}
)
// sync store on router navigation
router.afterEach(function(to, from) {
if (isTimeTraveling) {
isTimeTraveling = false
return
}
currentPath = to.fullPath
store.commit(moduleName + '/ROUTE_CHANGED', {
to: to,
from: from
})
})
}
function cloneRoute(to, from) {
var clone = {
name: to.name,
path: to.path,
hash: to.hash,
query: to.query,
params: to.params,
fullPath: to.fullPath,
meta: to.meta
}
if (from) {
clone.from = cloneRoute(from)
}
return Object.freeze(clone)
}
.router-link-active {
color: red;
}
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script src="https://unpkg.com/vuex/dist/vuex.js"></script>
<div id="app">
<p>
<router-link to="/top">Go to Top</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<router-view></router-view>
</div>
여기서 빈둥거리다
와 같이 는 잘 되어 있습니다.vuex
★★★★★★★★★★★★★★★★★」vue-router
의 논리입니다.
이 패턴은 현재 경로와 vuex의 getter에서 반환된 값 간의 관계에 관심이 없는 경우에 매우 효과적일 수 있습니다.
제가 Vue를 배울 때 이 실을 봤어요.그 질문에 대한 나의 이해를 조금 더했다.
Vuex는 Vue 애플리케이션의 상태 관리 패턴을 정의합니다.컴포넌트 소품을 정의하고 모든 장소에서 소품을 통해 공유 상태를 전달하는 것이 아니라 중앙 집중식 스토어를 사용하여 여러 컴포넌트가 공유하는 상태를 정리합니다.상태 돌연변이에 대한 제한은 상태 전이를 보다 명확하고 쉽게 추론할 수 있도록 합니다.
제공된 스토어 상태가 동일한 경우 일관된(또는 동일한) 뷰를 가져오거나 빌드하는 것이 이상적입니다.공유되는 문제를 합니다., 및가 있습니다.은, 「」에서 입니다.this.$router
★★★★★★ 。
vuex-router-sync
는 라우터 스테이트를 집중형 스테이트스토어에 동기화하기 위한 도우미입니다. 상태 할 수 , 이 는 체크할 this.$router
.
에 주의:route
그를 「변화 것은 「변화」를.$router.push
또는$router.go
다음과 같이 저장 중인 작업을 정의하면 도움이 될 수 있습니다.
// import your router definition
import router from './router'
export default new Vuex.Store({
//...
actions: {
//...
// actions to update route asynchronously
routerPush (_, arg) {
router.push(arg)
},
routerGo (_, arg) {
router.go(arg)
}
}
})
이렇게 하면route
스토어 액션의 갱신을 실시해, 그 갱신을 완전하게 실시할 수 있습니다.this.$router
컴포넌트의 의존성.
언급URL : https://stackoverflow.com/questions/44171210/what-is-vuex-router-sync-for
'programing' 카테고리의 다른 글
vue.js에서 새로 고치지 않고 페이지에서 데이터를 업데이트하는 방법 (0) | 2022.08.27 |
---|---|
Collection.stream().forEach()와 Collection.forEach()의 차이점은 무엇입니까? (0) | 2022.08.27 |
Java에서 문자열 형식의 현재 타임스탬프를 가져오려면 어떻게 해야 합니까?"yyy.MM.dd.HH.mm.ss." (0) | 2022.08.27 |
다시 Vue.nextTick을 Vuex 변환에 사용하는 것이 관례입니까?뭔가 부서질까? (0) | 2022.08.27 |
대규모 SPA에서 우수한 VueX 스토어 디자인을 사용하는 방법 (0) | 2022.08.27 |