我搜查了很多,但沒有明確的答案。基本上,突變後自動改變路線最好的做法是什麼?突變後改變路線(VueRouter)的最佳做法(Vuex)
例:我點擊一個按鈕來登錄() - >動作登錄,使HTTP調用 - >突變LOGIN_SUCCESSFUL - >我想將用戶重定向到主頁$router.go()
我應該換Promise中的動作,然後監聽結果以調用組件中的路由更改?
我應該直接從
$store
那裏做嗎?請問
vuex-router-sync
有幫助嗎?
非常感謝!
我搜查了很多,但沒有明確的答案。基本上,突變後自動改變路線最好的做法是什麼?突變後改變路線(VueRouter)的最佳做法(Vuex)
例:我點擊一個按鈕來登錄() - >動作登錄,使HTTP調用 - >突變LOGIN_SUCCESSFUL - >我想將用戶重定向到主頁$router.go()
我應該換Promise中的動作,然後監聽結果以調用組件中的路由更改?
我應該直接從$store
那裏做嗎?
請問vuex-router-sync
有幫助嗎?
非常感謝!
這個問題的答案似乎在Vue社區中有些不清楚。
大多數人(包括我)都會說商店的變異除了實際變更商店之外不應該有任何影響。因此,應該避免在$store
中直接進行路由更改。
我非常喜歡你的第一個建議:將承諾中的行動包裝起來,並在承諾解決後立即改變承諾組件的路線。
第三種解決方案是在組件中使用watch
,以便在您的LOGGED_IN_USER
狀態(或其他任何您稱之爲)發生更改時立即更改路由。雖然這種方法可以讓你的行動和突變保持100%的清潔,但我發現它非常迅速地變得混亂。
因此,我會建議走承諾路線。
將一個事件監聽器放到你的app.vue文件中,然後通過你的變異函數發出en事件。但我建議你在包裹承諾的行動是好辦法
App.vue:
import EventBus from './eventBus';
methods: {
redirectURL(path) {
this.$router.go(path)}
},
created() {
EventBus.$on('redirect', this.redirectURL)
}
突變:
import EventBus from './eventBus';
LOGIN_SUCCESSFUL() {
state.blabla = "blabla";
EventBus.$emit('redirect', '/dashboard')
}