gpt4 book ai didi

javascript - Vue - 如何从 Vuex 访问组件的属性

转载 作者:行者123 更新时间:2023-12-01 00:16:14 27 4
gpt4 key购买 nike

在我的应用程序中,我使用 Vuex 来执行异步任务。在本例中,我使用它来将用户登录到我的应用程序。当用户登录并执行 axios.then() 时,我想通知我调用 this.$store.dispatch('login', {username: userObj.username, password: userObj.password}); 的组件我的组件:


data() {
test: false
},

methods: {

login() {
const userObj = {
username: this.username,
password: this.password
};
console.log(userObj);
this.$store.dispatch('login',
{
username: userObj.username, password: userObj.password
});
}
},

Vuex:

const actions = {
login({ commit }, authData) {
axios.post('/login', {
username: authData.username,
password: authData.password
})
.then(resp => {
console.log(resp);
localStorage.setItem('token', resp.data.authToken);
localStorage.setItem('userId', resp.data.id);
localStorage.setItem('user', resp.data);
commit('storeUser', resp.data);
router.replace('/dashboard');
})
.catch(e => {
console.log(e);
alert('Something went wrong, try again')
});
},
}

在这里,在 .then() 方法中,我想以某种方式将组件中的测试属性更改为 true。有人可以帮我解决这个问题吗?

最佳答案

您可以从 vuex 操作返回 Promise:

const actions = {
login({ commit }, authData) {
return new Promise((resolve, reject) => {
axios.post('/login', {
username: authData.username,
password: authData.password
})
.then(resp => {
console.log(resp);
localStorage.setItem('token', resp.data.authToken);
localStorage.setItem('userId', resp.data.id);
localStorage.setItem('user', resp.data);
commit('storeUser', resp.data);
router.replace('/dashboard');
resolve(resp);
})
.catch(e => {
console.log(e);
alert('Something went wrong, try again')
reject(e);
});
})
},
}

当您分派(dispatch)操作时,您可以将其视为Promise(因为返回值是Promise):

// inside your component
this.
$store.
dispatch('login', {username: userObj.username, password: userObj.password})
.then(resp => { /* do something with axios response using component data and methods*/);

关于javascript - Vue - 如何从 Vuex 访问组件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59741349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com