zoukankan      html  css  js  c++  java
  • 61 . VUEX state 和 mutations

        附图1.

    现在我有一个计数器,是在 state里面定义的count,初始是1000,这样的话 所有的组件都可以 直接访问$store.state.count 即可访问到,但是+和-逻辑是这样写的:

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)   //注册vuex
    
    //新建VUEX对象
    const myVuex = new Vuex.Store({
        state:{count:1000},             //在state中存入count为1000
    
        getters:{},
        mutations:{},
        actions:{},
        modules:{},
    });
    
    
    export default myVuex   //导出VUX对象
    index.js 【vuex配置文件】
    <template>
      <div id="app">
        <!-- 一个简单计时器 -->
        <div class="count">
          
          <p>Number: &nbsp;&nbsp; {{ $store.state.count }}</p>      <!--即使可以实现 但是不规范-->
    
          <button @click="$store.state.count++">+</button>
    
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    
          <button @click="$store.state.count--">-</button>      <!--即使可以实现 但是不规范-->
        </div>
      </div>
    </template>
    
    
    
    <script>
    export default {
      // data() {
      //   return { count: 0 };
      // },
    };
    </script>
    
    
    <style scoped>
      .count{
          margin-left: 100px;
    }
    </style>
    App.vue App组件

    可以看到 功能是实现了 但是这样写是错的! 不可以这样写哦:

    最顶端那个图说明了如何修改流程 和 规范流程说明:

     如果我就是按照直接  @click="$store.state.count++  那么就会是这样:

      所以 直接跳过了 监听那步了,如果很多很多组件修改的话,那么你就不知道哪个修改了什么什么了,容易乱,所以我们更改行为然后要通过Commit函数来去改变state的值,,,,我们还要在浏览器安装拓展插件Devttols来监听,很强大的....这就是vuex 的本质:

     这个插件 百度找下即可 【谷歌进不去的情况下】

    所以我们这样修改state中的count:  【自己安装浏览器插件】

    先在 mutations中定义函数【自带state参数 可写入】,然后在组件中调用 this.$store.commit 函数,参数是字符串,是mutations中定义的函数名:

    具体看代码【注释给出】:

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)   //注册vuex
    
    //新建VUEX对象
    const myVuex = new Vuex.Store({
        state:{count:1000},             //在state中存入count为1000
    
        mutations:{                      //这里定义函数来修改state的值 [定义的函数自带state参数]
            addCount(state){
                state.count++;
            },
            subCount(state){
                state.count--;
            }
        },              
        
        getters:{},
        actions:{},
        modules:{},
    });
    
    
    export default myVuex   //导出VUX对象
    index.js 【vuex配置文件】
    <template>
      <div id="app">
        <!-- 一个简单计时器 -->
        <div class="count">
          
          <p>Number: &nbsp;&nbsp; {{ $store.state.count }}</p>      <!--即使可以实现 但是不规范-->
    
          <button @click="add">+</button>
    
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    
          <button @click="sub">-</button>      <!--即使可以实现 但是不规范-->
        </div>
      </div>
    </template>
    
    
    
    <script>
    export default {
        methods:{
          add(){
            this.$store.commit('addCount')      //其中参数是 mutations 中的函数名
          },
          sub(){
            this.$store.commit('subCount')      //其中参数是 mutations 中的函数名
          }
        }
    };
    </script>
    
    
    <style scoped>
      .count{
          margin-left: 100px;
    }
    </style>
    App.vue App组件

    运行:【配合插件】

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15159315.html

  • 相关阅读:
    oracle的安装与plsql的环境配置
    Working with MSDTC
    soapui-java.lang.Exception Failed to load url
    Oracle 一个owner访问另一个owner的table,不加owner
    Call API relation to TLS 1.2
    Call API HTTP header Authorization: Basic
    VS2008 .csproj cannot be opened.The project type is not supported by this installat
    The changes couldn't be completed.Please reboot your computer and try again.
    Create DB Table View Procedure
    DB Change
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15159315.html
Copyright © 2011-2022 走看看