在基于 vue 开发 SPA 项目时,为了解决页面刷新后数据丢失的问题,我们一般都是将数据存储在 localstorage 或 sessionstorage 中;当数据需要全局处理统一管理时,我们也会借助于 vue 官方提供的 vuex 来进行数据的统一管理。
vuex 相比 localstorage 或 sessionstorage 来说,存储数据更安全些。与此同时,vuex 也存在一些弊端,当页面刷新后,vuex 中 state 存储的数据同时也会被更新,vuex 中存储的数据不能持久化,需要监听处理来维持 vuex 存储的数据状态持久化。
为解决页面刷新后 vuex 中存储的数据状态不能持久化的问题,我采取的方案是借助第三方插件工具来实现 vuex 数据的持久化存储,来解决页面刷新后数据更新的问题。
源代码
使用方法
源代码
使用方法
属性值 | 数据类型 | 描述 |
---|---|---|
key | string | The key to store the state in the storage Default: 'vuex' |
storage | Storage (Web API) | localStorage, sessionStorage, localforage or your custom Storage object.Must implement getItem, setItem, clear etc.Default: window.localStorage |
saveState | function(key, state[, storage]) | If not using storage, this custom function handles saving state to persistence |
restoreState | function(key[, storage]) => state | If not using storage, this custom function handles retrieving state from storage |
reducer | function(state) => object | State reducer. reduces state to only those values you want to save. By default, saves entire state |
filter | function(mutation) => boolean | Mutation filter. Look at mutation.type and return true。 for only those ones which you want a persistence write to be triggered for. Default returns true for all mutations |
modules | string[] | List of modules you want to persist. (Do not write your own reducer if you want to use this) |
asyncStorage | boolean | Denotes if the store uses Promises (like localforage) or not (you must set this to true when suing something like localforage) Default: false |
supportCircular | boolean | Denotes if the state has any circular references to itself (state.x === state)Default: false |
上述两种方案都可以实现 vuex 数据持久化存储。方案一是我在实际开发过程中用到的,方案二是在 Github 上看到的,综合来说,两者都可以时间最终的需求,而且都有对应的案例 Demo 可以参考。相比来说方案一在 GitHub 上的 start 数要高于方案二。
请结合实际情况选择符合自己的方案!