14.vuex和localStorage,全局变量的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14.vuex和localStorage,全局变量的区别相关的知识,希望对你有一定的参考价值。

参考技术A Vuex是状态管理,是为了解决跨组件之间数据共享问题的,一个组件的数据变化会映射到使用这个数据的其他组件当中。如果刷新页面,之前存储的vuex数据全部都会被初始化掉。

localStorage是H5提供的一个更简单的数据存储方式,之前是用cookie存放数据,但是cookie的数据量太小,所以就用localStorage,它可以有5M的限制,不受刷新页面的控制,长久保存。

所以,在用vue进行项目开发的时候,什么时候用到vuex呢?

当应用遇到多个组件共享状态时候,即:多个视图依赖于同一个状态,不同视图的行为需要变更同一状态。

vuex的官网也说了,对于页面之间的传参对于多层嵌套组件将会很繁琐,而且对于兄弟组件之间的状态传递无能为力。所以就将这些组件的共享状态抽取出来,以一个全局单例模式管理,即vuex。

vuex和全局变量的区别:

1,【响应式】vuex的状态存储是响应式的,当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会得到高效更新。

2,【不能直接改变store】不能直接改变store的变化,改变store中状态的唯一途径是commit mutation。方便于跟踪每一个状态的变化。

vuex + localStorage 实现 token持久化

一、 通过vuex 和 localStorage 进行配合实现 token持久化

1. 我们知道 用 vuex保存token是为了每个组件都可以访问, 但vuex有一个缺点 就是刷新页面vuex中的数据会清空,这要导致只要用户一登录 并且刷新 保存的token就会消失,为了解决这个问题 我们要把token存在localStorage。

2. 为什么不存在sessionStorage里 个人觉得 sessionStorage虽然可以存储 但是它的生命周期不长,只要关闭页面后 sessionStorage里的数据会自动清空,而localStorage的数据只要不手动删除永远不会消失!!

如何vuex保存token?  跳转链接

二、封装一个保存、获取、删除token  .js文件


const myToken = 'my_token'

// 设置token
export const setToken = (newToken) => {
  localStorage.setItem(myToken, JSON.stringify(newToken))
}

// 获取token
export const getToken = () => {
  return JSON.parse(localStorage.getItem(myToken))
}

// 删除token   
export const remToken = () => {
  localStorage.removeItem(myToken)
}

// 清除所有localStorage的方法是 clear

上面有个注意点哦 如果保存的时候没有转换JSON对象 会将对象转换成字符串类型哦!!

三、保存token到localStorage

注意哈 这里是案例  按自己功能需要写到哪里

// 按需引入 设置token  保存token
import { setToken, getToken } from '../untils/localStorage'
// 保存在vuex 中  只截取了一部分代码 完整vuex在上面链接
 state: {
    // 获取token  如果getToken没有token值 转换为空对象   短路运算
    tokenInfo: getToken() || {}
  },
  // 修改state里的tokenInfo
  mutations: {
    setTokenInfo (state, newSetToken) {
      state.tokenInfo = newSetToken
      // 保存到localstorage
      setToken(newSetToken)
  }

四、魔法字符串

const myToken = 'my_token'

封装的时候我们发现 字符串赋值给了变量 

魔法字符串: 指的是, 在代码之中多次出现, 与代码形成强耦合的某一个具体的字符串或数值. 风格良好的代码, 应该尽量消除魔法字符串, 而由含义清晰的变量代替.

(ES6 -- 阮一峰)

以上是关于14.vuex和localStorage,全局变量的区别的主要内容,如果未能解决你的问题,请参考以下文章

简单分析vuex和localStorage的区别

jQuery的$.Ajax()返回的数据如何才能保存给全局变量?

Js造轮子,基础篇

跨多个页面设置javascript全局变量[重复]

创建用于检查 LocalStorage 是不是为空的全局函数 - Vue.JS

使用线程局部存储将具有全局变量的单线程遗留代码转换为多线程代码