美文网首页vue
Vuex的基本使用

Vuex的基本使用

作者: 顺其自然AAAAA | 来源:发表于2021-12-12 08:47 被阅读0次

一、安装

NPM

npm install vuex --save

Yarn

yarn add vuex

在main.js引入使用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

创建store文件夹,里面创建一个js文件 store/index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)  // 必须显式地通过 Vue.use() 来安装 Vuex

export default new Vuex.Store({
  state: {
    addCount: 0, // 显示的数值
    subCount: 1
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

二、开始使用(显示)---state

在vue中state有三种用法(显示)
第一种

<div>增加的数量1:{{$store.state.addCount}}</div>

第二种

<div>减少的数量:{{countTest}}</div>
<script>
export default {
  data() {
    return {
      countTest: null
    }
  },
  mounted() {
    this.countTest = this.$store.state.subCount;  
  },
}
</script>

第三种

<div>增加的数量2:{{addCount}}</div>
<script>
import {mapState} from 'vuex'
export default {
  computed: {
    ...mapState(['addCount'])
  },
}
</script>

三、Mutation

Mutation用于变更Store中的数据
① 只能通过mutation变更Store数据,不可以直接操作Store中的数据。
② 通过这种方式虽然操作起来稍微繁琐一些,但是可以集中监控所有数据的变化。

  mutations: {
    /*
    add 函数接收两个参数
    state: store里面的state对象(和mutition平级的state)
    data: 外界传入的值,可以随意命名,a,b,c都可以
    */ 
    add(state,data) {
      // 每点击一次,在原来的基础上加 data数值
      state.addCount += data;
    }
  },

触发mutations的第一种方式

  methods: {
    handleAdd() {
      // commit 的作用, 就是调用某个 mutation 函数
      this.$store.commit('add',2)
    }
  },

触发mutations的第二种方式

export default new Vuex.Store({
  state: {
    addCount: 0, // 显示的数值
    subCount: 1,
    aTest: '我是测试1'
  },
  mutations: {
    /*
    add 函数接收两个参数
    state: store里面的state对象(和mutition平级的state)
    data: 外界传入的值,可以随意命名,a,b,c都可以
    */ 
    add(state,data) {
      // 每点击一次,在原来的基础上加 data数值
      state.addCount += data;
    },
    sub(state,step) {
      state.aTest = step;
    }
  },
})
<script>
// 从vuex 中 按需导入 mapMutations 函数
import {mapState, mapMutations} from 'vuex'
export default {
  computed: {
    ...mapState(['addCount'])
  },
// 通过导入的mapMutations函数,将需要的mutations函数,映射为当前组件的methods方法
  methods: {
  // 讲指定的mutations 函数,映射为当前组件的methods 函数
    ...mapMutations(['sub']),
    handleAdd() {
      this.$store.commit('add',2)
    },
    handleTihuan() {
      this.sub('嘿嘿嘿!!!')
    }
  },
}
</script>

四、Actions

Actions 用于处理异步任务。
如果通过异步操作变更数据,必须通过Action,而不能使用Mutation,但是在Action中还是要通过触发Mutation的方式间接变更数据。
触发actions的第一种方式:

export default new Vuex.Store({
  state: {
    addCount: 0, // 显示的数值
  },
  mutations: {
    add(state) {
      state.addCount += 1;
    },
  },
  actions: {
    asyncAdd(context) {
      setTimeout(()=>{
        context.commit('add')
      },1000)
    }
  },
})
-----------------
  methods: {
    handleAdd() {
      this.$store.dispatch('asyncAdd')   // store 里面的方法名是哪个就在dispatch里面写哪个方法名
    },
  },

触发actions异步任务时携带参数:

  actions: {
    asyncAdd(context,step) {
      setTimeout(()=>{
        context.commit('add',step)
      },1000)
    }
  }
-----
this.$store.dispatch('asyncAdd',2)

触发actions的第二种方式:

  actions: {
    asyncSub(context,step) {
      setTimeout(()=>{
        context.commit('sub',step)
      },1000)
    } 
  },

------
import {mapState, mapMutations, mapActions} from 'vuex'
  methods: {
    ...mapMutations(['sub']),
    ...mapActions(['asyncSub']),
    handleSub() {
      this.asyncSub(1);
    },
  },
------
// 或者直接在DOM元素中使用
<div>减少的数量:{{$store.state.subCount}}</div>
    <!-- <el-button type="warning" @click="handleSub">减少</el-button> -->
    <el-button type="warning" @click="asyncSub(2)">减少</el-button>

五、Getters

Getters用于对Store中的数据进行加工处理形成新的数据
① Getters 可以对Store 中已有的数据加工处理之后形成新的数据,类似于Vue的计算属性。
② Store 中数据发生变化,Getters 的数据也会跟着变化。
使用getters的第一种方式:

  getters: {
 // 这里的state 是store 里面state
    showNumber: state => {
      return '当前最新的数据是【'+ state.testCount +'】'
    }
  },
-----------
  // this.$store.getters.名称
 this.$store.getters.showNumber

使用getters的第二种方式:

import {mapState, mapMutations, mapActions, mapGetters} from 'vuex'
--------------
 computed: {
    ...mapGetters(['showNumber'])
  },
-----------
<div>{{showNumber}}</div>

后续可能还有更新。。。

相关文章

  • Vuex

    1.Vuex概述 2.Vuex基本使用 3.使用Vuex完成todo案例 1.Vuex概述 Vuex是实现组件全局...

  • vuex@2.x 文档

    1、https://vuex.vuejs.org/zh-cn/2、vuex 使用文档3、vuex2.0 基本使用(...

  • VUEX基本介绍,包含实战示例及代码(基于Vue2.X)

    VUEX 1 VUEX基本介绍 1.1 官方API 1.2 什么是vuex 1.3 Vuex使用场景 1、Vuex...

  • 在vue中使用typescript - 使用篇

    基本使用 在vuex中使用 注: typescript目前对vuex的支持还不完善,需要引入 vuex-class...

  • vuex基本使用

    vuex使用 1、安装vuex 2、安装promise: Vuex 依赖 Promise。如果你支持的浏览器并没有...

  • Vuex基本使用

    vuex实现原理 1.在store.js中设置数据 2.在页面中发送数据 3.在store.js中接收从页面发送过...

  • Vuex的基本使用

    1.安装Vuex 2.创建store.js文件,在main.js中导入并配置store选项 3.编辑store.j...

  • Vuex的基本使用

    原文:https://laylawang17.github.io/2020/03/11/Vuex%E7%9A%84...

  • Vuex 的基本使用

    添加 vuex 的依赖 vue 中配置 vuex 打开 main.js 使用 vuex main.js 中的代码 ...

  • Vuex 的基本使用

    首先我们知道组件之间共享数据的方式有以下几种:父向子传值:v-bind属性绑定子向父传值:v-on 事件绑定兄弟组...

网友评论

    本文标题:Vuex的基本使用

    本文链接:https://www.haomeiwen.com/subject/atmkfrtx.html