Vuex +拆分模块 + 数据持久化(防止页面刷新数据丢失)

一、什么是vuex?

vue的集中式状态管理框架,组件共享data数据。
vuex的核心是store对象,有且只有这一个对象。
vuex和单纯的全局对象有以下两点不同:
1.vuex的状态存储是响应式的。
2.不能直接改变store中的状态,改变store中的状态的唯一途径就是显示的提交((commit)mutation。

二、vuex实现原理?

利用vue的mixin混入机制,在beforeCreate钩子前混入vuexInit方法,vuexInit方法实现了store注入vue组件实例,并注册了vuex store的引用属性$store。

三、vuex五个核心属性:

在这里插入图片描述

在这里插入图片描述

  • state: Vuex store实例的根state对象
  • getter:state的计算属性
  • mutations:提交更新数据的方法,必须是同步的(如果需要异步使用action)。每个mutation都有一个字符串的事件类型(type)和一个回调函数(handler)。
  • actions:和mutation的功能大致相同,不同之处在于==>1.Action提交的是mutation,而不是直接变更状态。2.Action可以包含任意异步操作,promise/定时器。
  • modules:模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。
    在这里插入图片描述
    对于actions尤大的回答
    在这里插入图片描述

四、Vuex的辅助函数有四个(mapState、mapGetter、mapMutation、mapAction)

  • mapState
  • mapGetter
  • mapMutation
  • mapAction
    注意:
    mapState,mapGetters返回的是属性,所以混入到 computed 中,
    mapMutations,mapActions返回的是方法,只能混入到methods中

五、vuex的用法

cnpm i vuex --save
  • –save(-S) 下载到dependencies(开发环境)
  • –save-dve(-D) 下载到devDependencies(生产环境)
    1.在src文件下新建store文件,引入vue,vuex,创建store实例。为了方便看,store四个属性没有分开导,这里也没有对store拆分模块。
    在这里插入图片描述

2在mian.js引入store,并挂载
在这里插入图片描述
3获取state有两种方式

  • this.$store.state.name
  • …mapState映射
    在这里插入图片描述
    在这里插入图片描述

4改state中的数据,有四种方式,commit,dispatch,mapMutations,mapActions辅助函数

  • 1.commit mutations(直接触发mutaions)
    在这里插入图片描述
    在这里插入图片描述

  • 2.使用action,(store使用dispatch通过action触发mutations)
    在这里插入图片描述
    在这里插入图片描述

  • 3.使用mapMutations,mapActions辅助函数
    在这里插入图片描述
    在这里插入图片描述

六、对vuex拆分模块

目录结构
在这里插入图片描述
在外层的模块引入子模块
在这里插入图片描述
子模块
在这里插入图片描述

七、数据持久化

vuex的数据是存储在内存中,页面刷新,会丢失数据
总结了以下几种方式
1.手动利用HTML5的本地存储
localStorage或sessionStorage
2.利用vuex-persistedstate插件,原理也是运用本地缓存

npm install vuex-persistedstate --save
import Vue from 'vue';
import Vuex from 'vuex';
import createPersistedState from "vuex-persistedstate"


Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    name: '',
    password: ''
  },
  getter: {},
  mutations: {
    setName(state,name) {
        state.name = name
    },
  },
  actions: {
      actionsSetName(context,value) {
        context.commit('setName',value)
    }
  },
  plugins: [createPersistedState({
    storage: window.localStorage
})]
})

export default store
  1. js-cookie插件
    下载
npm install js-cookie --save

引入

import Cookies from 'js-cookie'
Cookies.set('name', 'value',{ expires: 7, path: '' });                           //7天后过期
Cookies.get('name');          //获取
Cookies.remove('name')        //移除
//存对象
const user = {
  name: '小鹿Max',
  age: 18
}
Cookies.set('user', user)
const liaUser = JSON.parse(Cookies.get('user'))

写的很清晰:
https://blog.csdn.net/yupyuping/article/details/113740759

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值