Javascript 无法在vue组件中获取vuex状态
我试图在用户登录后获取用户数据,但它返回的是Javascript 无法在vue组件中获取vuex状态,javascript,vue.js,vuejs2,vuex,Javascript,Vue.js,Vuejs2,Vuex,我试图在用户登录后获取用户数据,但它返回的是Object,而不是user数组 代码 App.js(主要组件) 注意:根据我添加的loggedUser:state=>state.user,到我的getters中,但我得到的只是对象,什么都没有 关于用户数据 截图 问题: 如何在组件中获取用户数据?它不只是在值中吗 此.user.value您应该在用户登录后获得用户信息,而不是在创建应用程序组件时。因为在创建应用程序组件时,您没有登录 解决 由于无法从vuex状态获取用户信息,我决定限制从后端获取
Object
,而不是user数组
代码
App.js(主要组件)
注意:根据我添加的loggedUser:state=>state.user,
到我的getters
中,但我得到的只是对象,什么都没有
关于用户数据
截图
问题:
如何在组件中获取用户数据?它不只是在
值中吗
此.user.value
您应该在用户登录后获得用户信息,而不是在创建应用程序组件时。因为在创建应用程序组件时,您没有登录 解决
由于无法从vuex状态获取用户信息,我决定限制从后端获取的用户数据,并将其存储在本地存储中,这样我就可以从存储而不是vuex获取用户数据
代码
store.js
login({commit}, user){
return new Promise((resolve, reject) => {
commit('auth_request')
axios({url: '/api/auth/login', data: user, method: 'POST' })
.then(resp => {
console.log(resp)
const token = resp.data.access_token
const user = resp.data.user
console.log(user)
localStorage.setItem('access_token', token)
localStorage.setItem('user', JSON.stringify(user)) // added this line
axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
commit('auth_success', token, user)
resolve(resp)
})
.catch(err => {
commit('auth_error')
localStorage.removeItem('access_token')
localStorage.removeItem('user')
reject(err)
})
})
},
App.vue(主要组件)
我删除了created()
函数并添加了mounted()
函数
mounted() {
const user = JSON.parse(localStorage.getItem('user'));
const state = user
? { status: { loggedIn: true }, user }
: { status: {}, user: null };
if(user){
this.user = user.name
} else {
console.log('nothing')
}
}
这样我就不会有任何错误,无论是在有访问者的时候,还是在有登录用户的时候。而且我可以在他们登录后立即获得我的用户名
希望对其他人有用。在哪一部分?!在控制台的屏幕截图中,this.user=this.$store.getters.loggedUser
之后,它清楚地显示了一个值键。您是否尝试过扩展它?您提到的该值的屏幕截图记录响应响应数据.user
和响应数据
。如果你想知道哪些评论不适合长期讨论,你会很感兴趣;我尝试过(用空对象{}声明变量初始值并在app组件的created()中打印),结果显示与您的完全相同。因此,问题是您在设置getter之前调用getter。
login({commit}, user){
return new Promise((resolve, reject) => {
commit('auth_request')
axios({url: '/api/auth/login', data: user, method: 'POST' })
.then(resp => {
console.log(resp)
const token = resp.data.access_token
const user = resp.data.user
console.log(user)
localStorage.setItem('access_token', token)
localStorage.setItem('user', JSON.stringify(user)) // added this line
axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
commit('auth_success', token, user)
resolve(resp)
})
.catch(err => {
commit('auth_error')
localStorage.removeItem('access_token')
localStorage.removeItem('user')
reject(err)
})
})
},
mounted() {
const user = JSON.parse(localStorage.getItem('user'));
const state = user
? { status: { loggedIn: true }, user }
: { status: {}, user: null };
if(user){
this.user = user.name
} else {
console.log('nothing')
}
}