Vue Router 最佳实践:在商店或组件中重定向?
Vue Router best practice: Redirect in store or component?
假设你的 Vuex 商店中有类似 signOut()
的操作,你想在用户按下相应的按钮后重定向到主页。我应该在按钮所在的组件中还是在商店中进行重定向?
视情况而定:-)
我会说在一般情况下存储是独立于路由器的东西。
我会尽量避免从州接触路由器。
特别是在您使用 Nuxt 的情况下(这不是您的情况)没有干净的方法来获取路由器实例(是的,您可以使用 this._vm 破解它)
无论如何,如果您有一个链接到导航的操作绑定,您可以出于实际原因打破规则。我仍然会尝试从商店中提取路由逻辑。 (例如,从外部监听更改,可能是根组件,并从那里导航等)
真的取决于你的情况,对此没有 100% 明确的答案。
您可以 return Promise
从 action 并在组件的方法中处理它。
Vuex 商店:
const actions = {
signOut({ commit }) {
return new Promise(resolve => {
commit("SET_CREDENTIALS", null);
resolve();
})
}
};
您的组件的方法部分:
methods: {
signOut() {
this.$store.dispatch("signOut")
.then(() => this.$router.push("/home"));
}
},
假设你的 Vuex 商店中有类似 signOut()
的操作,你想在用户按下相应的按钮后重定向到主页。我应该在按钮所在的组件中还是在商店中进行重定向?
视情况而定:-)
我会说在一般情况下存储是独立于路由器的东西。 我会尽量避免从州接触路由器。
特别是在您使用 Nuxt 的情况下(这不是您的情况)没有干净的方法来获取路由器实例(是的,您可以使用 this._vm 破解它)
无论如何,如果您有一个链接到导航的操作绑定,您可以出于实际原因打破规则。我仍然会尝试从商店中提取路由逻辑。 (例如,从外部监听更改,可能是根组件,并从那里导航等)
真的取决于你的情况,对此没有 100% 明确的答案。
您可以 return Promise
从 action 并在组件的方法中处理它。
Vuex 商店:
const actions = {
signOut({ commit }) {
return new Promise(resolve => {
commit("SET_CREDENTIALS", null);
resolve();
})
}
};
您的组件的方法部分:
methods: {
signOut() {
this.$store.dispatch("signOut")
.then(() => this.$router.push("/home"));
}
},