vuex应用

刚来公司时看到项目中这么写的,虽然不太明白为什么要这么搞,但是也算作是一个学习吧

VUEX

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

什么情况下我应该使用 Vuex?

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。

如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式 (opens new window)就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。

这是官网中的概述。因为在项目中运用的地方有限,我对这个管理共享状态的表述不是很懂,觉得就是应该去管理一些比较公共的数据,而非去用作模块api返回数据的管理。当然,后期我在项目中也有用vuex去作一个返回数据的接收管理,不过那次的应用是模板与组件拼合后的方案必选项了,所以另当别论。now start ~~

store

store(仓库),它包含着你的应用中大部分的状态 (state)。Vuex 的状态存储是响应式的,不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。

vuex的五个概念:
  • state
  • getters( store 的计算属性)
  • mutations(更改 Vuex 的 store 中的状态的唯一方法是提交 mutation)
  • actions(action 提交的是 mutation,而不是直接变更状态;包含任意异步操作)
  • modules
命名空间(namespaced: true)

默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的——这样使得多个模块能够对同一 mutation 或 action 作出响应。

如果想让模块具有更高的封闭性和可复用性,可以通过设置namespaced: true使其成为带有命名空间的模块。

在带命名空间的模块内访问全局内容

如果你希望使用全局 state 和 getter,rootState 和 rootGetters 会作为第三和第四参数传入 getter,也会通过 context 对象的属性传入 action。

若需要在全局命名空间内分发 action 或提交 mutation,将 { root: true } 作为第三参数传给 dispatch 或 commit 即可。

import {
   getMarketSupply,
   getSettlementPrice,
   getInstalledCapacity,
   editInstalledCapacity,
   deleteInstalledCapacity,
   getSimilarDays,
   getWeather,
   getMarketCapacity,
   getConstraint,
   getOverhaul,
   getNodePrice,
   getSimilarDaysTopMarket,
   getSimilarDaysTopPrice,
} from '@/api/dashboard';
import cloneDeep from 'clone-deep';
import * as moment from 'moment';

const dashboard = {
   namespaced: true,
   state: () => ({
      marketSupplyData: {},
   }),
   mutations: {
     setMarketSupplyData(state, payload) {
        state.marketSupplyData = cloneDeep(payload) || [];
     },
   },
   actions: {
      // 市场供需
      getMarketSupply({
         commit, state,
      }, params) {
         const param = {
            beginDate: params && params.beginDate ? params.beginDate : moment(state.originDate[0]).format('YYYY-MM-DD'),
            endDate: params && params.beginDate ? params.endDate : moment(state.originDate[1]).format('YYYY-MM-DD'),
            type: params.type,
         };
         getMarketSupply(param).then(res => {
            commit('setMarketSupplyData', res);
         });
      }
      // 批量添加或者更新全网机组装机容量
      editInstalledCapacity({
         dispatch,
      }, params) {
         return new Promise((resolve, reject) => {
            editInstalledCapacity(params).then(res => {
               resolve(res);
            }).catch(e => {
               reject(e);
            });
         });
      },
   },
};

export default dashboard;
import { createNamespacedHelpers } from 'vuex';
const { mapActions } = createNamespacedHelpers('dashboard');


 computed: {
   marketSupplyOptions() {
       return this.$store.state.dashboard.marketSupplyData;
    }
 },

watch: {
	marketPriceDataOptions: {
	    handler(val) {
	       if(Object.keys(val).length > 0 || val.length > 0) {
	          this.priceArr = val;
	          this.getMarketPriceOption(val);
	       }
	    },
	    immediate: true,
	 },
}

 methods: {
	...mapActions(['getMarketSupply', 'getSettlementPrice', 'getNodePrice']),
	a(){
		this.getMarketSupply({ type: Number(this.activeName), ...param });
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值