• Vuex笔记


    1. Vuex介绍

    • ​ Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化

    2. Vuex快速使用

    1. 创建vue项目,并安装vuex依赖

      npm install vuex
      
    2. vue项目中src目录下新建store目录,并添加index.js文件,输入以下代码

      import Vue from 'vue'
      import Vuex from 'vuex'
      
      Vue.use(Vuex)
      
      const store = new Vuex.Store({
          state:{
              count:1
          },
          mutations:{
              add(state){
                  state.count ++;
              },
              adds(state,data){
                  state.count += data;
              },
              reduce(state){
                  state.count --;
              },
              reduces(state,data){
                  state.count -= data;
              }
          }
      })
      export default store
      
      
    3. 在main.js中导入store.js,并注册到vue中

      import Vue from 'vue'
      import App from './App.vue'
      import store from './store'
      
      Vue.config.productionTip = false
      
      new Vue({
        render: h => h(App),
        store  //注册vuex的store
      }).$mount('#app')
      
    4. 在vue中进行使用

      <template>
        <div id="app">
          count:{{$store.state.count}}
           <div>
                <button @click="reduceCount" style="60px;height:30px">减</button>
                <button @click="reduceCounts(2)" style="60px;height:30px">减2</button>
            </div>
        </div>
      </template>
      <script>
      export default {
        methods:{
          reduceCount(){
            this.$store.commit('reduce');
          },
           reduceCounts(data){
            this.$store.commit('reduces',data);
          }
        }
      }
      </script>
      

    3. Vuex构成

    • state:存储状态(变量)
    • getters:对数据获取之前的再次编译,可以理解为state的计算属性。在组件中使用 $sotre.getters调用
    • mutations:同步修改state,在组件中使用$store.commit('',params)调用。
    • actions:异步修改state。在组件中使用$store.dispatch('',params)调用
    • modules:store的子模块,用起来和上面的一样。主要用于大型应用中,方便状态管理。

    4. 完整示例

    • store/index.js
    import Vue from 'vue';
    import Vuex from 'vuex';
    
    Vue.use(Vuex);
    
    const moduleA = {
      state: {
        userName: 'zhangsan'
      }
    };
    
    export default new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        addCount(state) {
          state.count++;
        },
        addCounts(state, params) {
          state.count += params;
        }
      },
      actions: {
        addCountAction({ commit }) {
          commit('addCount');
        },
        addCountsAction({ commit }, params) {
          commit('addCounts', params);
        }
      },
      getters: {
        EvenOrOdd(state) {
          return state.count % 2 === 0 ? '偶数' : '奇数';
        }
      },
      modules: {
        moduleA
      }
    });
    
    
    • main.js
    import Vue from 'vue';
    import App from './App.vue';
    import router from './router';
    import store from './store';
    
    Vue.config.productionTip = false;
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app');
    
    
    • app.vue
    <template>
      <div>
        name:{{ $store.state.moduleA.userName }}<br>
        count:{{ $store.state.count }},是{{ $store.getters.EvenOrOdd }}
        <div>
          <button class="btn" @click="add">
            通过mutations添加
          </button>
          <button class="btn" @click="add2(2)">
            通过mutations添加(带参数)
          </button>
          <button class="btn" @click="add3()">
            通过actions添加
          </button>
          <button class="btn" @click="add4(2)">
            通过actions添加(带参数)
          </button>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: 'Home',
      methods: {
        add() {
          this.$store.commit('addCount');
        },
        add2(params) {
          this.$store.commit('addCounts', params);
        },
        add3() {
          this.$store.dispatch('addCountAction');
        },
        add4(params) {
          this.$store.dispatch('addCountsAction', params);
        }
      }
    };
    </script>
    <style scoped>
    .btn{
       200px;
      height: 38px;
      border-radius: 6px;
      padding: 10px;
      margin: 10px;
      background: #498ef0;
    }
    </style>
    
    
  • 相关阅读:
    js中属性和方法的类型和区别
    深入理解js构造函数
    null和undefined区别(转)
    理解闭包 js回收机制
    php:判断 是否开启 SSL,CURL,ZIP,GD2,MYSQL,是否安装MEMCACHED
    php:封装了个时间函数,返回类似“1分钟前发布”,“5小时前发布”,“3年前发布”
    php:获取一个表不含text类型的全部字段
    php:两个文件夹递归地比较,没有的文件自动复制过去
    php:php相关的函数或用法记录
    js:常用到的js操作记录
  • 原文地址:https://www.cnblogs.com/scorpiozone/p/14819752.html
Copyright © 2020-2023  润新知