1. sessionStorage
存储位置
sessionStorage
是浏览器提供的 Web Storage API 的一部分,用于在一个会话期间存储数据。数据保存在浏览器的 内存 中,而不是在硬盘上,且其生命周期仅限于当前浏览器标签页。数据在浏览器窗口或标签页关闭时会被清除。
- 存储位置: 数据保存在浏览器的内存中(而不是服务器端)。
- 生命周期: 当前浏览器会话期间有效(关闭标签页或浏览器后数据丢失)。
- 作用范围: 数据只对当前标签页有效,不会在其他标签页或浏览器窗口中共享。
你可以通过 sessionStorage.setItem()
和 sessionStorage.getItem()
来存储和读取数据。
示例:
// 存储数据
sessionStorage.setItem('username', 'JohnDoe');// 获取数据
const username = sessionStorage.getItem('username');// 删除数据
sessionStorage.removeItem('username');// 清除所有数据
sessionStorage.clear();
2. Vuex
存储位置
Vuex
是 Vue.js 状态管理库,用于集中式管理应用状态。Vuex
存储的数据是存在 浏览器内存 中的,跟 sessionStorage
不同,Vuex
存储的数据是由 Vue 应用程序本身管理的,而不是浏览器的 Web Storage API。
- 存储位置: 数据保存在 Vuex 状态树(JavaScript 对象)中,属于浏览器内存。
- 生命周期: Vuex 数据在应用的生命周期内有效,页面刷新会清空
Vuex
数据,除非你将数据持久化(例如,使用插件如vuex-persistedstate
)。 - 作用范围: 数据在整个 Vue 应用中共享,任何组件都可以访问和修改
Vuex
中的状态。
在 Vuex 中,状态数据存储在 state
中,状态的读取通常通过 getters
,状态的修改通过 mutations
和 actions
完成。
示例:
// 在 Vuex store 中定义状态
const store = new Vuex.Store({state: {username: 'JohnDoe',},mutations: {setUsername(state, newUsername) {state.username = newUsername;}},actions: {updateUsername({ commit }, newUsername) {commit('setUsername', newUsername);}}
});// 访问 Vuex 数据
console.log(store.state.username); // 输出: JohnDoe// 修改 Vuex 数据
store.commit('setUsername', 'JaneDoe');
console.log(store.state.username); // 输出: JaneDoe
对比总结
特性 | sessionStorage | Vuex |
---|---|---|
存储位置 | 浏览器内存 | 浏览器内存(Vue 应用的状态树) |
生命周期 | 当前会话有效(标签页关闭后数据丢失) | 当前应用会话有效(刷新页面后数据丢失) |
作用范围 | 仅限于当前标签页或窗口 | Vue 应用中的所有组件可以访问和修改 |
数据类型 | 键值对,通常以字符串存储,可通过 JSON 转换复杂数据 | 任何 JavaScript 对象,支持嵌套和复杂数据结构 |
持久化 | 数据在标签页关闭时丢失 | 默认情况下数据在页面刷新后丢失,可通过插件持久化 |
同步/异步 | 同步 | 支持同步和异步(通过 mutations 和 actions ) |
总结:
sessionStorage
适用于需要在单个会话中持久化存储的数据,而Vuex
更适合用于在应用的不同组件之间共享和管理状态。- 如果需要持久化
Vuex
状态,可以使用vuex-persistedstate
插件,将数据存储到localStorage
或sessionStorage
中。