Vuex从入门到放弃(webpack自动导入模块 命名空间 辅助函数)

陈蕃
• 阅读 1673

Vuex从入门到放弃(webpack自动导入模块 命名空间 辅助函数)

1.什么是vuex

1.1 什么是状态管理

  • state,驱动应用的数据源;
  • view,以声明方式将 state 映射到视图;
  • actions,响应在 view 上的用户输入导致的状态变化。

下面是从官方文档上扒下来的一张图简洁明了的说明了单向数据流的特性

Vuex从入门到放弃(webpack自动导入模块 命名空间 辅助函数)

如果单单使用只使用单向数据流的模式进行开发,业务组件不复杂倒还好,可是遇到组件层级比较深的情况下就会导致代码难以维护。

1.2 Vuex

Vuex从入门到放弃(webpack自动导入模块 命名空间 辅助函数)

没错!这张图也是从官方文档里面扒下来的,这张图按照我的理解可以拆分成三部分。
1.2.1 第一部分:不经过官方提供的api(mapstate mapactions mapmutations)来触发视图的更新,请看以下例子
  • index.vue
//index.vue
<template>
  <div>
    <div>{{datacount}}</div>
    <div>{{count}}</div>
    
    <button @click="increment()">+</button>
    <button @click="reduce()">-</button>
  </div>
</template>

<script>
import { mapState } from "vuex";
export default {
  data() {
    return {
      datacount: this.$store.state.count //1.这样写视图并不会实时更新
      //   count: 0
    };
  },
  // views
  computed: {
    // count() {
    //   return this.$store.state.count;//3. 通过计算属性能够视图能够实时响应更新
    // },
    ...mapState(['count'])//4. 辅助函数的写法 语法糖的效果能让你少按几次键盘
  },
  methods: {
    increment() {
      this.$store.commit("increment");
      // this.count = this.$store.state.count;  2.通过直接赋值的方式当然能实时响应状态
      console.log(this.$store.state.count);
    },
    reduce() {
      this.$store.commit("reduce");
      //   this.count = this.$store.state.count;
      console.log(this.$store.state.count);
    }
  }
};
</script>
  • store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
 const store = new Vuex.Store({
    state: {
        count: 0,

      },
      mutations: {
        increment (state) {
          state.count++
       
        },
        reduce(state){
            state.count--    
         
        }
      }
    });
export default store;
1.2.2 经过官网提供的辅助函数(语法糖)来触发vuex的状态更新
  • ...mapState 映射为 this.$store.state.xxxx
  • ...mapGetters 映射为 this.$store.getters.xxxx
  • ...mapActions 映射为 this.$store.dispatch("xxx",n);

直接上代码:

//index.vue
<template>
  <div>
      <h5>辅助函数Getters:{{getStateCount}}</h5>
      <h5>辅助函数Getters:{{count}}</h5>
       <button @click="ADD_ONE(2)">+ADD_ONE</button>
    <button @click="REDUCE_ONE(5)">-REDUCE_ONE</button>
  </div>
</template>

<script>
import { mapState, mapGetters, mapActions  } from "vuex";
export default {
  data() {
    return {
          
    };
  },
  computed: {
    ...mapGetters(["getStateCount"]),
    ...mapState('app',['count'])
  },
  methods: {
    ...mapActions('app',["ADD_ONE"]),
    ...mapActions('app',["REDUCE_ONE"]),
  }
};
</script>
//store/index.js
import Vue from "vue";
import Vuex from "vuex";
import getters from "./getters"
import app from "./modules/app"

Vue.use(Vuex);



const store = new Vuex.Store({
  modules:{
    app, 

 },
  getters
})

export default store
//store/getters.js

const getters = {
    // getStateCount(state){
    //     return state.app.count+1
    // }
    getStateCount:state => state.app.count+5
}
export default getters
//store/modules/app.js
const state = {
    count:0
}
const mutations = {
    ADD_ONE:(state,n) => {
        state.count +=n
    },
    REDUCE_ONE:(state,n) => {
        state.count -=n
    }
}

const actions = {
    ADD_ONE:({commit},count) =>{
        commit('ADD_ONE',count)
    },
    REDUCE_ONE:({commit},count) =>{
        commit('REDUCE_ONE',count)
    }
}

export default {
    namespaced: true,//这一行代码添加了 就给vuex添加了一个命名空间
    state,
    mutations,
    actions
  }
还可以通过webpack来自动导入模块 自行查询require.context这个api 网速的文章介绍都很多 这里就不展开了。最后重点来了:外包在职萌新求内推 位置广州
点赞
收藏
评论区
推荐文章
Chase620 Chase620
4年前
Vue方向:Vuex状态管理: 辅助函数mapState与mapGetters
1、mapState和mapGetters的作用   mapState用于将state中的数据映射到组件的计算属性中,而mapGetters用于将getter中的计算属性映射到组件的计算属性中,之前获取Vuex数据都是通过$store找到state对象,再去state中去拿数据,操作getter,muta
Dax Dax
4年前
veux的使用
1)说说什么是vuex(下定义)2)vuex解决了哪些问题,为什么要用(必要性)3)怎么使用vuex(使用方法)4)描述vuex原理,提升答案深度(深层原理升华答案)vuex的流程图分析:我们可以看到图中虚线框包裹起来的部分就是vuex的三个组成部分(Action,Mutations,state),我们来简单的捋一下整个流程:首先vue的组件在响应用户行为交
劳伦斯 劳伦斯
4年前
前端面试题自检 Vue 网络 浏览器 性能优化部分
框架VueMVVM是什么?ModelViewViewModel,Model表示数据模型层。view表示视图层,ViewModel是View和Model层的桥梁,数据绑定到viewModel层并自动渲染到页面中,视图变化通知viewModel层更新数据。Vue的生命周期
九路 九路
5年前
通过一个简单实例了解vuex
简单说明什么是vuex,vuex怎么使用,什么场景下适合使用vuex,vuex文档(https://links.jianshu.com/go?tohttps%3A%2F%2Fvuex.vuejs.org%2Fzh%2F)中都有介绍。看完文档之后,都知道vuex的核心有State、Getter、Mutation、Action、Modul
可莉 可莉
4年前
了解Vuex状态管理模式
1Vuex是什么呢?它是Vue的状态管理模式,在使用vue的时候,需要在vue中各个组件之间传递值是很痛苦的,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被改变,所有引用该值的地方就会自动更新。是不是很方便,很好用呢?vuex是专门为vue.js设计的状态管理模式,集中式存储和管理应用程序中所有组件的状态,vuex也集成了vue的
Stella981 Stella981
4年前
Redis从入门到放弃系列(二) Hash
Redis从入门到放弃系列(二)Hash本文例子基于:5.0.4Hash是Redis中一种比较常见的数据结构,其实现为hashtable/ziplist,默认创建时为ziplist,当到达一定量级时,redis会将ziplist转化为hashtableRedis从入门到放弃系列(一)String
Wesley13 Wesley13
4年前
MySQL学习(十二)
视图view在查询中,我们经常把查询结果当成临时表来看,view是什么?view可以看成一张虚拟表,是表通过某种运算得到的一个投影。表的变化会影响到视图既然视图只是表的某种查询的投影,所以主要步骤在于查询上,查询的结果命名为视图就可以了。创建视图的语法CREATEVIEW视图ASSELECT语句;mysqlcreate
Stella981 Stella981
4年前
Redis从入门到放弃系列(九) Sentinel
Redis从入门到放弃系列(九)Sentinel本文例子基于:5.0.4RedisSentinel作为Redis高可用方案,具有监听,通知,自动故障转移等功能.这一切都是依赖主备同步的大前提(参考上一节:Redis从入门到放弃系列(八)主备同步).监听:Sentinel会不断
Stella981 Stella981
4年前
Redis从入门到放弃系列(三) List
Redis从入门到放弃系列(三)List本文例子基于:5.0.4List是Redis中一种比较常见的数据结构,其实现为quicklist,quicklist是一个ziplist的双向链表Redis从入门到放弃系列(一)String(https://www.oschina.net/action/
GeorgeGcs GeorgeGcs
8个月前
【HarmonyOS 5】鸿蒙中@State的原理详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、@State在鸿蒙中是做什么的?@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式。通过将变量标记为@State