VUEJS ROUTER 在将其推送到调度操作之前刷新页面
VUEJS ROUTER Refresh page before pushing it in dispatch action
我有一个创建用户页面。当我点击创建用户按钮时,它工作正常,它创建了新用户并将我重定向到显示所有用户的页面。但我注意到,为了在此处(在显示所有用户的页面中)看到最后一个用户(刚刚创建的用户),我需要刷新页面。
这里是代码,在createUser.vue:
methods: {
onSubmit() {
const userData = {
username: this.form.username,
email: this.form.email,
password: this.form.password
}
try {
this.userData = createUser(userData)
this.$message('User created!')
this.$router.push({
path: '/users-list'
})
} catch (err) {
console.log('Error in creating user: ', err)
}
}
}
并且在用户中-list.vue:
created() {
this.$store.dispatch('user/setUsers')
const users = this.$store.getters.users
this.users = users
console.log("ALL USERS WITH GET PROFILE IN LISTA: ", users)
console.log('store in lista utenti: ', this.$store.state)
this.totalRows = this.users.length
},
有没有办法在渲染之前刷新推送的路由?
我缺少任何生命周期挂钩吗?
或者可能使用手表来发现 users
的状态变化(在商店中包含所有创建的用户)?
我目前正在检查此解决方案,因为它似乎最适合我,但如果我遗漏了有关生命周期挂钩的某些信息,则此选项可能会很好。
如果有人在我之前有答案,请分享:)
谢谢
x
更新
我回到这个问题,我认为最好的方法是@ambianBeing createUser().then(res => /*do stuff*/)
do stuff = ?
因此,在用户模块中,我创建了一个新的突变和一个新的动作(将在 then() 中调度的动作 - 在推送新路由之前
.then(() => {
....
this.$store.dispatch('user/addUser')
this.$router.push({...})
})
).
将刚刚创建的用户推送到用户数组的突变是:
ADD_USER: (state, user) => {
state.users = [user, ...state.users]
},
而提交这个突变的动作是:
addUser({ commit }, users){
commit('ADD_USER', users)
},
但是我得到了刚刚创建的未定义用户,这里是 console.log:
ALL USERS WITH GET PROFILE IN USERS LIST: (18) [undefined, {…}, {…}, {…}, {…}, {…}]
我也尝试在提交中使用 user 而不是 users,但它也不起作用。
有人知道怎么帮忙吗?
谢谢
正如评论中已经提到的,您的 promise 似乎无法快速解决,因为它是异步调用。有多种方法可以解决此问题。这里有 2.
使用你的回报承诺
@ambianBeing 已经提到了这一点。您可以在最终导致预期结果的返回承诺中设置任何内容。
使用计算属性
您也可以使用 computed
属性。这样做,您的组件将在每次状态更改时重新呈现。所以以下可能会解决您的问题。
computed: {
users() {
return this.$store.getters.users;
}
}
我没有将用户对象传递给操作……
this.$store.dispatch('user/addUser')
但该操作希望收到一个:
addUser({ commit }, user){
commit('ADD_USER', user)
}
N.B。正确的动作是路过的用户而不是用户。
这解决了问题,这就是解决问题的方法。我猜。如果有人有不同的想法,请。
谢谢
我有一个创建用户页面。当我点击创建用户按钮时,它工作正常,它创建了新用户并将我重定向到显示所有用户的页面。但我注意到,为了在此处(在显示所有用户的页面中)看到最后一个用户(刚刚创建的用户),我需要刷新页面。
这里是代码,在createUser.vue:
methods: {
onSubmit() {
const userData = {
username: this.form.username,
email: this.form.email,
password: this.form.password
}
try {
this.userData = createUser(userData)
this.$message('User created!')
this.$router.push({
path: '/users-list'
})
} catch (err) {
console.log('Error in creating user: ', err)
}
}
}
并且在用户中-list.vue:
created() {
this.$store.dispatch('user/setUsers')
const users = this.$store.getters.users
this.users = users
console.log("ALL USERS WITH GET PROFILE IN LISTA: ", users)
console.log('store in lista utenti: ', this.$store.state)
this.totalRows = this.users.length
},
有没有办法在渲染之前刷新推送的路由? 我缺少任何生命周期挂钩吗?
或者可能使用手表来发现 users
的状态变化(在商店中包含所有创建的用户)?
我目前正在检查此解决方案,因为它似乎最适合我,但如果我遗漏了有关生命周期挂钩的某些信息,则此选项可能会很好。
如果有人在我之前有答案,请分享:) 谢谢 x
更新
我回到这个问题,我认为最好的方法是@ambianBeing createUser().then(res => /*do stuff*/)
do stuff = ?
因此,在用户模块中,我创建了一个新的突变和一个新的动作(将在 then() 中调度的动作 - 在推送新路由之前
.then(() => {
....
this.$store.dispatch('user/addUser')
this.$router.push({...})
})
).
将刚刚创建的用户推送到用户数组的突变是:
ADD_USER: (state, user) => {
state.users = [user, ...state.users]
},
而提交这个突变的动作是:
addUser({ commit }, users){
commit('ADD_USER', users)
},
但是我得到了刚刚创建的未定义用户,这里是 console.log:
ALL USERS WITH GET PROFILE IN USERS LIST: (18) [undefined, {…}, {…}, {…}, {…}, {…}]
我也尝试在提交中使用 user 而不是 users,但它也不起作用。
有人知道怎么帮忙吗? 谢谢
正如评论中已经提到的,您的 promise 似乎无法快速解决,因为它是异步调用。有多种方法可以解决此问题。这里有 2.
使用你的回报承诺
@ambianBeing 已经提到了这一点。您可以在最终导致预期结果的返回承诺中设置任何内容。
使用计算属性
您也可以使用 computed
属性。这样做,您的组件将在每次状态更改时重新呈现。所以以下可能会解决您的问题。
computed: {
users() {
return this.$store.getters.users;
}
}
我没有将用户对象传递给操作……
this.$store.dispatch('user/addUser')
但该操作希望收到一个:
addUser({ commit }, user){
commit('ADD_USER', user)
}
N.B。正确的动作是路过的用户而不是用户。
这解决了问题,这就是解决问题的方法。我猜。如果有人有不同的想法,请。 谢谢