• vue-15-vuex-store的用法


    vue-16-vuex

    1, 介绍

    对 vue 进行状态管理的, 集中存储所有组件的所有状态, 解决多个组件共享数据的问题.
    即, 所有组件可以拿到同样的状态, 组件间共享数据

    2, 在之前进行数据交互, 需要有子父关系

    parent:

    <template>
      <div>
        parent: {{ info }}
        <Child :title="msg" @sendMsg="handlerMsg"/>
      </div>
    </template>
    
    <script>
      import Child from "./Child";
      export default {
        name: "Parent",
        components: {Child},
        data() {
          return {
            msg: "hello son",
            info: ""
          }
        },
        methods: {
          handlerMsg(info) {
            this.info = info
          }
        }
      }
    </script>
    
    <style scoped>
    
    </style>
    

    child:

    <template>
      <div>
        Child:
        receive from parent: {{ title }}
    
        <div>
          <button @click="sendMsg">emit </button>
        </div>
      </div>
    </template>
    
    <script>
      export default {
        name: "Child",
        data() {
          return {
    
          }
        },
        props: {
          title: {
            type: String,
            default: ""
          }
        },
        methods: {
          sendMsg() {
            this.$emit("sendMsg", "the message from son ")
          }
        }
      }
    </script>
    
    <style scoped>
    </style>
    

    3. vue的状态管理

    view -> (dispath) Action -> (Commit)Mutations -> (Mutate) State -> View
    注意: Actions不会必需品, 如果有异步操作才可能用到 Action, 否则不可以使用

    4. 安装VueX

    cnpm install --save vuex
    

    5. 使用

    // vuex
    import Vuex from 'vuex'
    Vue.use(Vuex)
    

    6. store 是vuex 的核心

    在src 下创建 store 文件夹, 并新建 index.js
    写入store

    // vuex
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    // 创建vuex的store
    const store = new Vuex.Store({
      state: {
        count: 5
      },
      // 更改store的状态
      mutations: {
        increment (state) {
          state.count++
        },
        decrement (state) {
          state.count--
        }
      },
      // 有异步的时候, 需要action
      actions: {
        increment(context) {
          context.commit('increment')
        },
        decrement (context) {
          setTimeout(function () {
            context.commit("decrement")
          }, 10)
        }
      },
      // 通过getter 进行数据获取
      getters: {
        getState(state) {
          return state.count > 0 ? state.count : 0;
        }
      }
    })
    
    export default store
    

    在 main.js 中导入, 并注入到 App中

    import store from './store'
    
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      // 注入 store
      store,
      router,
      components: { App },
      template: '<App/>',
    })
    

    7. 在vue 中进行引用

    <template>
      <div>
        <div>
          test...
          {{ msg }}<br/>
        </div>
    
        <div>
          获取值 --
          {{ getCount }} <br/>
          <button @click="add">inc</button>
          <button @click="des">decri</button>
        </div>
    
      </div>
    </template>
    
    <script>
      export default {
        name: "outter",
        data() {
          return {
            msg: "hello"
          }
    
        },
        computed: {
          // 避免编程负数, 需要通过方法进行获取
          getCount() {
            // return this.$store.state.count
            return this.$store.getters.getState;
          }
        },
        methods: {
          add() {
            this.$store.commit("increment")
          },
          des() {
            // 使用 action中的异步方法
            this.$store.dispatch("decrement")
          },
        }
      }
    </script>
    
    <style scoped>
    
    </style>
    
  • 相关阅读:
    Swift学习 --- 2.1基础部分
    【oracle案例】ORA-01722
    一种适合于大数据的并行坐标下降法
    【机器学习算法-python实现】svm支持向量机(3)—核函数
    让Editplus支持sql语法高亮显示
    CF986F Oppa Funcan Style Remastered
    HashMap和Hashtable的区别
    ArrayList和Vector的区别
    基本概念
    java编程规范
  • 原文地址:https://www.cnblogs.com/wenbronk/p/9738031.html
Copyright © 2020-2023  润新知