Vuex笔记

本质:

实现组件之间的数据共享,类似与Spring的IOC,所以还是很有必要的,而且是MVVM的

vue特点:vue适合单页面项目

版本:Vue2版本对应Vuex3版本

vuex:所有组件有一个共享的全局对象store

安装vue:

-g  全局安装

npm i vue -g

安装vue脚手架:

npm i vue-cli -g

 安装vue路由:

npm install vue-router -g

创建一个项目:

vue create vuex-demo

安装VueX

npm i vuex@3

项目创建后: 

 项目启动:

npm run serve

全局共享数据state的用法:

main.js

import Vue from 'vue'
import App from './App.vue'
// vuex
import store from './store'

Vue.config.productionTip = false//没有的话,会显示你生产模式的消息

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

store.js 

// vuex的store全局共享类
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    // 全局属性
    count: 0
  },
  getters: {
    /**
     * get属性,不是方法
     * @param state
     * @returns {string}
     */
    showNum(state) {
      return '当前的数量是' + state.count+'个'
    }
  },
  mutations: {
    /**
     * 方法,对全局数据的操作在这里完成
     * 不能执行异步代码,比如setTimeout
     * @param state
     * @param step
     */
    add(state, step) {
      state.count += step
    },
    sub(state, step) {
      state.count -= step
    }
  },
  actions: {
    /**
     * 方法
     * 异步操作变更数据
     * @param context
     */
    addAsync(context, step) {
      setTimeout(() => {
        context.commit('add', step)
      }, 2000)
    },
    subAsync(context, step) {
      setTimeout(() => {
        context.commit('sub', step)
      }, 2000)
    }
  },
  modules: {}
})

Addition.vue 

<template>
  <div>
    <h3>当前的count值为:{{ $store.state.count }}</h3>
    <button @click="$store.commit('add',2)">加一</button>
    <button @click="$store.dispatch('addAsync',2)">延时加一</button>
    <h3>{{$store.getters.showNum}}</h3>
  </div>
</template>

<script>
export default {
  data() {
    return {}
  },
  methods: {}
}
</script>

Subtraction.vue 

<template>
  <div>
    <h3>当前的count值为:{{ count }}</h3>
    <button @click="sub(3)">减一</button>
    <button @click="subAsync(5)">延时减一</button>
    <h3>{{ showNum }}</h3>
  </div>
</template>

<script>

import {mapActions, mapMutations, mapState,mapGetters} from 'vuex'

export default {
  data() {
    return {}
  },
  computed: {
    /**
     * 方式二
     * 展开语法
     */
    ...mapState(['count']),
    ...mapGetters(['showNum'])
  },
  methods: {
    /**
     * 方式二
     */
    ...mapMutations(['add', 'sub']),
    ...mapActions(['subAsync'])
  }
}
</script>

App.vue:

<template>
  <div>
    <my-addition></my-addition>
    <my-subtraction></my-subtraction>
  </div>
</template>

<script>

import Addition from "./components/Addition";
import Subtraction from "./components/Subtraction";

export default {
  data() {
    return {}
  },
  components: {
    'my-addition': Addition,
    'my-subtraction': Subtraction
  }
}
</script>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋劲豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值