美文网首页
Vuex基础

Vuex基础

作者: KATENGC | 来源:发表于2020-04-26 11:20 被阅读0次

    父子组件之间的通信,父组件通过props向子组件传递参数,子组件通过$emit将数据回传给父组件。但是如果我们有多个不相关的组件要共用一份数据,又要如何实现呢?这里就要用到Vuex,详细看下官方文档

    image.png
    • State:所有组件想要共用数据的部分
    • Mutations:直接操作State数据。在Mutations里定义如何改变这个数据
    • Actions:告诉Mutations何时去执行改变数据的操作

    以上这些是Vuex的内容,那么Vuex又是如何与组件关联的呢?
    组件是有模板和数据组成,而Vuex中的State就是数据,虽然没有在data中,所以Vue模板是可以render这个数据的,Vue的组件也可以通过一些行为来触发Actions

    我们用一个简单的例子来演示下Vuex的用法,这里我们实现对count的加减操作。

    新建store.js

    import Vue from 'vue';
    import Vuex from 'vuex';
    
    Vue.use(Vuex);
    
    const state = {
      count: 1
    };
    
    const mutations = {
      increment(state) {
        state.count++;
      },
    
      decrement(state) {
        state.count--;
      }
    };
    
    const actions = {
      increment: ({commit}) => {
        commit('increment')
      },
    
      decrement: ({commit}) => {
        commit('decrement')
      }
    };
    
    export default new Vuex.Store({
      state,
      mutations,
      actions
    })
    

    在state中定义count,默认其值为1;
    在mutations中定义increment方法,用于对count++操作;定义decrement方法,用于对count--操作;
    在actions中commit

    在main.js中引入store.js

    import store from './store.js'
    
    new Vue({
      el: '#app',
      router,
      store,
      components: {App},
      template: '<App/>'
    })
    

    创建组件vuex.vue

    <template>
      <div>
        Vuex {{$store.state.count}}
        <button type="button" name="button" @click="increment">增加</button>
        <button type="button" name="button" @click="decrement">删减</button>
      </div>
    </template>
    
    <script>
      import {mapActions} from 'vuex'
    
      export default {
        name: "vuex",
        methods: mapActions([
          'increment',
          'decrement'
        ])
      }
    </script>
    
    <style scoped>
    
    </style>
    
    

    在按钮中添加了点击事件increment和decrement,分别对应的是methods中mapActions的两个方法;
    $store对应的就是在main.js中引入的store,state.count就是我们在store.js文件中的count

    若对mapActions函数的写法不理解,可以看下官方文档的解释


    image.png

    效果如下:


    image.png

    通过点击【增加】或【删减】,可以看到数值的变化

    相关文章

      网友评论

          本文标题:Vuex基础

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