zoukankan      html  css  js  c++  java
  • 四、vuex的使用

    一、Vuex演示(mutations同步方法)

    通过const state定义变量方式,在new Vuex.Store是引用的写法

    1、main.js

    //sotre中的变量为所有组件共享变量,即全局变量
    
    import Vue from 'vue';//引用vue
    import Vuex from 'vuex';//引用vuex
    Vue.use(Vuex);//使用vuex
    
    //一、格式
    /*const store = new Vuex.Store();
    export default store;*/
    
    ////////////////////////////////////////////////////////////////////////////////////
    
    //2、示例
    
    // 定义数据
    // state在vuex中是用于储存数据的
    const state={
        name : 100
    }
    
    // 定义方法 mutation同步,因为能改变state的方法是mutations
    // mutations 里面方的是方法,主要用于改变state中的数据源
    const mutations ={ 
        addNumber(){
            state.name+=100
        },
        reduceNumber(){
            state.name+=100
        },
    },
    
    //定义方法 actions异步 使用场景:异步操作比如数据请求,则需要放在 action 中
    
    // 实例化 Vuex.store,用到什么引什么,用到actions就引入actions,用到getters就引入getters,本文只用到这两个
    const store = new Vuex.Store({
        state,
        mutations
    })
    
    export default store;
    
    //1、页面中用this.$store.state来获取到state中的某个值。
    //2、页面中使用this.$store.commit来调用vuex中mutations里的某个方法
    //3、页面中使用this.$store.dispatch来调用vuex中actions里的某个方法
    
    
    //actions和mutation的区别
    
    //Action 提交的是 mutation,而不是直接变更状态

    页面调用

    <template>
        <div>{{this.$store.state.name}}
         <button @click="add">增加100</button>
         <button @click="reduce">减少100</button>
       </div>
    </template>
    <script>
    export default {
      components: {
      },
      data() {
        return {
          active: 2
        };
      },
      methods: {
          add(){
           this.$store.commit('addNumber')
          },
          reduce(){
           this.$store.commit('reduceNumber')
          },
      }
    }
    </script>

    二、演示(action示例异步调用)

    store.js文件

    //sotre中的变量为所有组件共享变量,即全局变量
    
    import Vue from 'vue';//引用vue
    import Vuex from 'vuex';//引用vuex
    Vue.use(Vuex);//使用vuex
    
    const store = new Vuex.Store({
        state: {
          count: 0
        },
        mutations: {
          increment (state) {
            state.count++
          }
        },
        actions: {
          increment (context) {
            context.commit('increment')
          }
        }
      })
      
    export default store
     
    //1、页面中用this.$store.state来获取到state中的某个值。
    //2、页面中使用this.$store.commit来调用vuex中mutations里的某个方法
    //3、页面中使用this.$store.dispatch来调用vuex中actions里的某个方法
    
    
    //actions和mutation的区别
    
    //Action 提交的是 mutation,而不是直接变更状态

    页面调用

    <template>
        <div>{{this.$store.state.count}}
         <button @click="add">增加100</button>
       </div>
    </template>
    <script>
    export default {
      components: {
      },
      data() {
        return {
          active: 2
        };
      },
      methods: {
          add(){
             this.$store.dispatch('increment')
          },
      }
    }
    </script>

    三、演示(action示例异步调用扩展)

    1、扩展回调参数

    store.js页面

    //sotre中的变量为所有组件共享变量,即全局变量
    
    import Vue from 'vue';//引用vue
    import Vuex from 'vuex';//引用vuex
    Vue.use(Vuex);//使用vuex
    
    const store = new Vuex.Store({
        state: {
          count: 0
        },
        mutations: {
          increment (state) {
            state.count++
          }
        },
        actions: {
          increment (context,param) {
            context.commit('increment')
            //action执行后回调
            if (param.success) param.success()
          }
        }
      })
      
    export default store
     
    //1、页面中用this.$store.state来获取到state中的某个值。
    //2、页面中使用this.$store.commit来调用vuex中mutations里的某个方法
    //3、页面中使用this.$store.dispatch来调用vuex中actions里的某个方法
    
    
    //actions和mutation的区别
    
    //Action 提交的是 mutation,而不是直接变更状态

    页面调用

    <template>
        <div>{{this.$store.state.count}}
         <button @click="add">增加100</button>
       </div>
    </template>
    <script>
    export default {
      components: {
      },
      data() {
        return {
          active: 2
        };
      },
      methods: {
          add(){
              this.$store.dispatch("increment", {
                  success() {
                      alert("incremented!")
                  }
              })
          },
      }
    }
    </script>

     关键点

    payload里面添加一个回调函数的变量

    2、扩展回调参数+属性一起使用

    store页面

    //sotre中的变量为所有组件共享变量,即全局变量
    
    import Vue from 'vue';//引用vue
    import Vuex from 'vuex';//引用vuex
    Vue.use(Vuex);//使用vuex
    
    const store = new Vuex.Store({
        state: {
          count: 0,
          list:[]
        },
        mutations: {
            //这里的state对应着上面这个state,param则是传过来的参数  //因为是new在一个store里面的所以需要参数,
          increment (state,param) {
            state.count++;
            state.list=param;
          }
        },
        actions: {
          //这里的context和我们使用的$store拥有相同的对象和方法,param则是传过来的参数变量(具有两个属性)
          increment (context,param) {
            context.commit('increment',param.list)
            //action执行后回调
            if (param.success) param.success()
          }
        }
      })
      
    export default store
     
    //1、页面中用this.$store.state来获取到state中的某个值。
    //2、页面中使用this.$store.commit来调用vuex中mutations里的某个方法
    //3、页面中使用this.$store.dispatch来调用vuex中actions里的某个方法
    
    //actions和mutation的区别
    
    //Action 提交的是 mutation,而不是直接变更状态

    调用页面

    <template>
        <div>
          {{this.$store.state.count}}
          {{this.$store.state.list}}
           <button @click="add">增加100</button>
       </div>
    </template>
    <script>
    export default {
      components: {
      },
      data() {
        return {
          active: 2
        };
      },
      methods: {
          add(){
              this.$store.dispatch("increment", {
                  //定义匿名变量参数内加两个属性,一个list变量,一个回调函数
                  list: [{name: '李白'}, {name: '高渐离'}, {name: '盖聂'}],
                  success() {
                        alert("incremented!")
                  }
              })
          },
      }
    }
    </script>

    效果图:

     

    注意:其实上面都是参数(参数匿名变量里面有回调函数和普通变量在一起的定义使用的写法,仅仅是写法)

    3、扩展回调异步ajax请求后

  • 相关阅读:
    Struts2中的类型转换失败
    使用 paramsPrepareParamsStack 拦截器栈后的运行流程
    Action请求流程分析
    Struts2的默认拦截器执行顺序
    网络通信的整个流程
    路由和交换机工作原理
    网络编程之socket
    关于socket的setsockopt的使用
    socket工作原理深入分析
    网络通信协议(互联网协议)
  • 原文地址:https://www.cnblogs.com/fger/p/12297584.html
Copyright © 2011-2022 走看看