vuex

vue2.0一个独一无二的状态共享框架。
共五个概念:state、setter、state、mutation、action、module。

什么时候使用vuex:
1多个组件依赖于同一状态。
2.来自不同组件的行为需要变更同—状态。

三个核心模块

state:放置状态的位置,所有需要共享的状态只能放在state里面

mutation:改变状态必须通过mutation,只能写同步代码,原因:数据快照-devtools打印

为什么只能同步,官方代码

mutations: {
  someMutation (state) {
    api.callAsyncMethod(() => {
      state.count++
    })
  }
}

官方解释:现在想象,我们正在 debug 一个 app 并且观察 devtool 中的 mutation 日志。每一条 mutation 被记录,devtools 都需要捕捉到前一状态和后一状态的快照。然而,在上面的例子中 mutation 中的异步函数中的回调让这不可能完成:因为当 mutation 触发的时候,回调函数还没有被调用,devtools 不知道什么时候回调函数实际上被调用——实质上任何在回调函数中进行的状态的改变都是不可追踪的。

个人看法:因为更改state的函数必须是纯函数,纯函数既是统一输入就会统一输出,没有任何副作用;如果是异步则会引入额外的副作用,导致更改后的state不可预测。纯函数概念:输入参数固定-输出结果固定。

action:逻辑操作,动作,异步放在action中-得到的状态更改也必须通过mutation

const store = new Vuex.Store({
	state:{
	  name:"aa" //初始化的时候从缓存读取
    },
    mutations:{
    	//两个参数(state,payload)
    	//payload 载荷参数(其实就是参数,可以在这里传递任意的结构的数据) 
		updateName(state,payload){
			state.name=payload //赋值 响应式变化
		}
	},
	actions:{
		//this.$store = context 等价的
		getAsyncName(context){
			setTimeout({
				//模拟得到后台数据,修改state
				//俩个参数("需要提交的mutation",需要传入mutation的载荷)
				context.commit("updateName","需要传入mutation的载荷")
			},1000)
		}
	}
})

vuex持久化

持久化分为前端持久化,后端持久化都是通过缓存来做的,也就是面试常问的vuex刷新页面时数据丢失问题。
localStorage 自己写也可以,也可以用插件。
原理:刷新页面-所有的东西都销毁重来vuex也会重来,要保证重新初始化的时候能够读取到之前存储的数据,从缓存中读取数据。
如何做:初始化的时候从缓存中读取。
修改的状态的时候存入缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值