前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vuex的基本使用

Vuex的基本使用

作者头像
用户7043603
发布2022-02-26 15:49:26
4150
发布2022-02-26 15:49:26
举报

一、安装

NPM

代码语言:javascript
复制
npm install vuex --save

Yarn

代码语言:javascript
复制
yarn add vuex

在main.js引入使用

代码语言:javascript
复制
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

代码语言:javascript
复制
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有三种用法(显示) 第一种

代码语言:javascript
复制
<div>增加的数量1:{{$store.state.addCount}}</div>

第二种

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

第三种

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

三、Mutation

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

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

触发mutations的第一种方式

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

触发mutations的第二种方式

代码语言:javascript
复制
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;
    }
  },
})
代码语言:javascript
复制
<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的第一种方式:

代码语言:javascript
复制
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异步任务时携带参数:

代码语言:javascript
复制
  actions: {
    asyncAdd(context,step) {
      setTimeout(()=>{
        context.commit('add',step)
      },1000)
    }
  }
-----
this.$store.dispatch('asyncAdd',2)

触发actions的第二种方式:

代码语言:javascript
复制
  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的第一种方式:

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

使用getters的第二种方式:

代码语言:javascript
复制
import {mapState, mapMutations, mapActions, mapGetters} from 'vuex'
--------------
 computed: {
    ...mapGetters(['showNumber'])
  },
-----------
<div>{{showNumber}}</div>

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、安装
  • 二、开始使用(显示)---state
  • 三、Mutation
  • 四、Actions
  • 五、Getters
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com