vue/vuex: 你能从另一个页面重新渲染一个页面吗?
vue/vuex: Can you re-render a page from another page?
在我的应用程序中首次登录时,用户可以留下他们的地址。存储此地址后,用户将被推送到他们的仪表板。第二次登录用户直接进入仪表板。
我有 2 个使用 response.data 更新的 Vuex 状态。 'Signed' 指向地址页,'Frequent' 指向 'dashboard'。
//PROMPT.VUE
mounted () {
this.getPrompt()
},
computed: {
promptStatus () {
return this.$store.getters.getPrompt
}
},
methods: {
async getPrompt() {
try{
await //GET axios etc
// push prompt status in Store
let value = response.data
this.$store.commit('setPrompt', value)
if (this.promptStatus === 'signed') {
this.$router.push({path: '/adres'})
}
if (this.promptStatus === 'frequent') {
this.$router.push({path: '/dashboard'})
}
当用户离开地址时,我将 vuex.state 从 'signed' 重置为 'frequent'。
//ADRES.VUE
//store address
let value = 'frequent'
this.$store.commit('setPrompt', value)
this.$router.push({name: 'Prompt'})
刷新了Vuex.store。但是 Prompt.vue 不会用新的 vuex.status 重新渲染。写了很多。找不到我的解决方案。可能我的页面组织方式不对。
在views中,不建议在vuex外修改数据(call commit)。为这些目的创建动作(使用分派从组件调用)。在您的情况下,您需要从商店调用操作“getPrompt”,但在授权组件中处理路由。这更多是关于最佳实践
为了解决您的问题,您需要在切换到仪表板时制作一个加载器。在收到数据之前,您不会将用户转移到仪表板页面
例子
<script lang="ts">
import { defineComponent } from "vue";
export default defineComponent({
name: "DashboardLayout",
components: { ..., ... },
data: () => ({
isLoad: false
}),
async created() {
this.isLoad = false;
try {
await this.$store.dispatch('getData');
this.isLoad = true;
} catch (error) {
console.log(error)
}
}
});
</script>
数据在“getData”操作中被接收并存储在存储中。
仪表板页面的引用在授权后发生。如果授权无效,router/index.js 中的 router.beforeEach 处理程序(导航守卫)应该重定向回登录页面。
在我的应用程序中首次登录时,用户可以留下他们的地址。存储此地址后,用户将被推送到他们的仪表板。第二次登录用户直接进入仪表板。
我有 2 个使用 response.data 更新的 Vuex 状态。 'Signed' 指向地址页,'Frequent' 指向 'dashboard'。
//PROMPT.VUE
mounted () {
this.getPrompt()
},
computed: {
promptStatus () {
return this.$store.getters.getPrompt
}
},
methods: {
async getPrompt() {
try{
await //GET axios etc
// push prompt status in Store
let value = response.data
this.$store.commit('setPrompt', value)
if (this.promptStatus === 'signed') {
this.$router.push({path: '/adres'})
}
if (this.promptStatus === 'frequent') {
this.$router.push({path: '/dashboard'})
}
当用户离开地址时,我将 vuex.state 从 'signed' 重置为 'frequent'。
//ADRES.VUE
//store address
let value = 'frequent'
this.$store.commit('setPrompt', value)
this.$router.push({name: 'Prompt'})
刷新了Vuex.store。但是 Prompt.vue 不会用新的 vuex.status 重新渲染。写了很多
在views中,不建议在vuex外修改数据(call commit)。为这些目的创建动作(使用分派从组件调用)。在您的情况下,您需要从商店调用操作“getPrompt”,但在授权组件中处理路由。这更多是关于最佳实践
为了解决您的问题,您需要在切换到仪表板时制作一个加载器。在收到数据之前,您不会将用户转移到仪表板页面
例子
<script lang="ts">
import { defineComponent } from "vue";
export default defineComponent({
name: "DashboardLayout",
components: { ..., ... },
data: () => ({
isLoad: false
}),
async created() {
this.isLoad = false;
try {
await this.$store.dispatch('getData');
this.isLoad = true;
} catch (error) {
console.log(error)
}
}
});
</script>
数据在“getData”操作中被接收并存储在存储中。
仪表板页面的引用在授权后发生。如果授权无效,router/index.js 中的 router.beforeEach 处理程序(导航守卫)应该重定向回登录页面。