return localStorage.getItem('TOKEN') 有什么用
时间: 2024-01-15 12:05:16 浏览: 20
return localStorage.getItem('TOKEN')的作用是从浏览器的本地存储中获取名为"TOKEN"的键值对的值,这个键值对是之前使用localStorage.setItem('TOKEN', token)存储的。这个操作通常用于读取之前保存的用户身份验证信息,以便在用户再次访问时恢复用户的登录状态。如果localStorage中没有名为"TOKEN"的键值对,那么这个操作返回null。
相关问题
return { token: GET_TOKEN()!, } export const GET_TOKEN = () => { return localStorage.getItem('TOKEN') }中 token: GET_TOKEN()!, 有什么用
在这段代码中,token: GET_TOKEN()! 的作用是将一个名为"token"的键值对添加到一个对象中,并将这个键值对的值设置为GET_TOKEN()的返回值。GET_TOKEN()函数的作用是从浏览器的本地存储中获取名为"TOKEN"的键值对的值,如果没有这个键值对,则返回null。在这里,使用GET_TOKEN()来获取本地存储中的"TOKEN"值,并将其添加到一个对象中,最终返回这个对象。
在代码中加上 ! 的作用是告诉 TypeScript 编译器,GET_TOKEN() 函数一定会返回一个值,不会返回 null 或 undefined。这样可以让编译器在编译时检查代码的类型安全。
state: { // 数据 active: localStorage.getItem('active') || 0, token: localStorage.getItem('token') || '', userInfo: JSON.parse(localStorage.getItem('userInfo')) || {} }, mutations: { // 改数据函数 setActive(state, payload) { localStorage.setItem('active', payload) state.active = payload }, setUserInfo(state, payload) { localStorage.setItem('token', payload.token) localStorage.setItem('userInfo', JSON.stringify(payload)) state.userInfo = payload } }, actions: { // 请求数据函数 asyncSetUserInfo(ctx, payload) { return new Promise((resolve, reject) => { ctx.commit('setUserInfo', payload) resolve() }) } },使用asyncSetUserInfo触发setuserinfo来修改state中的数据,store.dispatch('asyncSetUserInfo', res.data.data).then((res) => { console.log(2) router.push('/mine') })页面跳转后不能获取到state中的数据
根据你提供的代码,有以下几点问题:
1. `setActive` mutation 中的 `localStorage.setItem('active', payload)` 应该改为 `localStorage.setItem('active', state.active)`,因为只有在 mutation 中更新了 state 的值之后,才能正确地将新值存储到 localStorage 中。
2. `setUserInfo` mutation 中的 `localStorage.setItem('token', payload.token)` 应该改为 `localStorage.setItem('token', state.token)`,同样地,只有在 mutation 中更新了 state 的值之后,才能正确地将新值存储到 localStorage 中。
3. 在 `asyncSetUserInfo` action 中,你应该在 `resolve()` 之前调用 `ctx.commit('setUserInfo', payload)`,因为只有在 mutation 中更新了 state 的值之后,才能正确地将新值存储到 localStorage 中,并返回一个 Promise。
4. 在 `then` 方法中,应该先判断数据是否已经成功更新,才进行页面跳转。例如:
```javascript
store.dispatch('asyncSetUserInfo', res.data.data).then(() => {
console.log(2)
if (store.state.userInfo.token) { // 判断数据是否已经成功更新
router.push('/mine')
}
})
```
根据以上修改,你的代码应该是这样的:
```javascript
state: {
active: localStorage.getItem('active') || 0,
token: localStorage.getItem('token') || '',
userInfo: JSON.parse(localStorage.getItem('userInfo')) || {}
},
mutations: {
setActive(state, payload) {
localStorage.setItem('active', state.active)
state.active = payload
},
setUserInfo(state, payload) {
localStorage.setItem('token', state.token)
localStorage.setItem('userInfo', JSON.stringify(payload))
state.userInfo = payload
}
},
actions: {
asyncSetUserInfo(ctx, payload) {
return new Promise((resolve, reject) => {
ctx.commit('setUserInfo', payload)
resolve()
})
}
},
```
希望这些修改能够解决你的问题。