本地存储在重新加载时返回对象
localstorage returning object on reload
我正在使用 vue.js 和 vuex
在我的 vuex 操作中,我像这样调用外部 api:
//actions.js
getStudent({ commit }) {
new Promise((resolve, reject) => {
student.getStudent()
.then(response => {
localStorage.setItem("userInfo", JSON.stringify(response.data.userData))
commit('UPDATE_USER_INFO', JSON.stringify(response.data.userData), { root: true })
resolve(response)
})
}
}
在此函数中,用户数据被设置为本地存储项。
我也用 commit
调用突变
当第一次执行此函数时,一切正常,例如以下代码:
//state.js
const userInfoLocalStorage = JSON.parse(localStorage.getItem("userInfo"))
const setUserRole = () => {
const userRole = userInfoLocalStorage ? userInfoLocalStorage.role : 'student'
return userRole
}
const state = {
Role: setUserRole()
}
现在每当我重新加载页面时 JSON.parse returns 错误 Unexpected token o in JSON at position 1 ,当我删除 JSON.parse 时,它 returns [object Object]。但是当我使用 JSON.stringify 时,它 returns 一个 json 对象,但这只在第一次加载时有效。
我觉得很混乱
请帮我弄清楚我应该使用的最佳实践。
问题出在这一行:
const userRole = userInfoLocalStorage ? JSON.parse(userInfoLocalStorage).role : 'student'
您正在对一个对象 (userInfoLocalStorage
) 调用 JSON.parse
,该对象 (userInfoLocalStorage
) 已在上面的行中用 JSON.parse
反序列化:
const userInfoLocalStorage = JSON.parse(localStorage.getItem("userInfo"))
相反,只需 const userRole = userInfoLocalStorage ? userInfoLocalStorage.role : 'student'
我正在使用 vue.js 和 vuex
在我的 vuex 操作中,我像这样调用外部 api:
//actions.js
getStudent({ commit }) {
new Promise((resolve, reject) => {
student.getStudent()
.then(response => {
localStorage.setItem("userInfo", JSON.stringify(response.data.userData))
commit('UPDATE_USER_INFO', JSON.stringify(response.data.userData), { root: true })
resolve(response)
})
}
}
在此函数中,用户数据被设置为本地存储项。 我也用 commit
调用突变当第一次执行此函数时,一切正常,例如以下代码:
//state.js
const userInfoLocalStorage = JSON.parse(localStorage.getItem("userInfo"))
const setUserRole = () => {
const userRole = userInfoLocalStorage ? userInfoLocalStorage.role : 'student'
return userRole
}
const state = {
Role: setUserRole()
}
现在每当我重新加载页面时 JSON.parse returns 错误 Unexpected token o in JSON at position 1 ,当我删除 JSON.parse 时,它 returns [object Object]。但是当我使用 JSON.stringify 时,它 returns 一个 json 对象,但这只在第一次加载时有效。
我觉得很混乱
请帮我弄清楚我应该使用的最佳实践。
问题出在这一行:
const userRole = userInfoLocalStorage ? JSON.parse(userInfoLocalStorage).role : 'student'
您正在对一个对象 (userInfoLocalStorage
) 调用 JSON.parse
,该对象 (userInfoLocalStorage
) 已在上面的行中用 JSON.parse
反序列化:
const userInfoLocalStorage = JSON.parse(localStorage.getItem("userInfo"))
相反,只需 const userRole = userInfoLocalStorage ? userInfoLocalStorage.role : 'student'