019-Vuex状态管理

一、Vuex简介

vue应用程序的状态管理模式。他采用集中式存储管理应用的所有组件的状态,
并以相应的规则保证状态以一种可预测的方式发生变化。
vuex包含部分

  1. View
  2. Actions
  3. Mutations
  4. State在这里插入图片描述
    一句话总结上图:
    每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。
    Vuex模块间可以共享状态。vue组件dispatch发送事件触发Actions,
    Actions可以进行异步请求,再去通过commit触发Mutations,Mutations只可以
    同步操作仓库中的数据
    mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)

二、安装

npm install vuex --save
若开发的是多页面,且使用的vue是通过script引入的,那么在引入vue.js
之后再引入vuex.js。

三、使用

1、在入口文件main.js中引入

import Vuex from ‘vuex’;

2、全局注册使用

Vue.use(Vuex);

3、实例化数据中心store
import Vue from 'vue';
import Vuex from 'vuex';
import Store from './store';
...
// 温馨提示:只有在导入vue、vuex之后才能实例化store
let store = new Vuex.Store(Store);
...

若数据量比较大时,可以将store单独抽取为一个模块。
下面是官方给出结构示例:
https://vuex.vuejs.org/zh/guide/structure.html
在这里插入图片描述
在官方给出结构的基础上剥离了state,把他和actions放在同一文件层级下。
A、index.js 导出store。

import state from './state';
import getters from './getters';
import actions from './actions';
import mutations from './mutations';
export default {
	state ,
	getters ,
	actions ,
	mutations 
};

B、state.js

export default {
	orderList: [],
	params: {}
}

C、actions.js 异步请求api接口

const actions = {
	fetchOrderList ({ commit , state}) {
		axios.get('/api/getOrderList', { state.params } )
		.then(res => {
			commit('updateOrderList' ,  res.data.list);
		}).catch(err => {
			
		})
	}
}

D、mutations.js 同步动作

const mutations = {
	updateOrderList (state , payLoad) {
		state.orderList = payLoad;
	},
	/*updateParams (state , payLoad ) {
		state.params[payLoad.key] = payLoad.val; 
	},*/
	updateParams (state , { key ,val } ) {
		state.params[key] = val; 
	},
}

E、getters.js 获取state的数据

const getters = {
	getOrderList: state => state.orderList
}
4、放到vue实例中使用
 new Vue({
	el: '#app' ,
	store ,
	router , 
	component: { Layout } ,
	template: '<Layout />'
});
5、组件中使用store的方法
1、异步数据更改
A、计算属性
computed () {
	// 动态的获取数据
	tableData () {
		// this.$store store对象
		return this.$store.getters.getOrderList
	}
}
B、主动调用actions进行赋值
mounted () {
	// 请求结果的修改
	this.$store.dispatch('fetchOrderList ');
}
C、组件的渲染
<view v-for="item in tableData" >
	<view>{{ item.name }}</view>
</view>
2、同步数据的更改
A、结构
<view v-for="item in ['m','w']" @click='changeType(item)'>类型更改</view>
B、初始化type值
data () {
	return {
		type: 'm'
	}
}
C、更改type值的逻辑处理
methods	{
	changeType (str) {
		this.$store.commit('updateParams',{
			key: 'type', // data对象下要更改的属性名
			val: str
		});
		this.$store.dispatch('fetchOrderList ');
	},
}

dispatch、commit等方法详情,请查看官方文档:
https://vuex.vuejs.org/zh/api/#vuex-store

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值