• vuex的基本使用


    一、Vuex是什么?

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

    二、vuex的5个核心属性:

    1. state:vuex的基本数据,用来存储变量,可以把它是为vue中的data。

    2. getters:可以把它是为vue中的computed,计算属性,可以对state中的变量进行处理。

    3. mutations更改 Vuex 的 store 中的状态的唯一方法是提交 mutation,可以把它视为vue中的methods。

    • mutation必须是同步的,异步使用action。
    • mutation使用 store.commit 方法触发。

    4. actions:它类似于上面的mutations,但是它又跟mutations有所不同。

    • action 提交的是 mutation,而不是直接变更状态。
    • action 可以包含任意异步操作。
    • action通过 store.dispatch 方法触发。

    5. modules:模块,当我们的应用很大时,所有的状态都集中在一个store对象里,显得臃肿不堪,这时可以将store分割到模块,每个模块都有自己的state、getters、mutations、actions。

    在项目中常用的:this.$store.state、this.$store.getters、this.$store.dispatch、this.$store.commit

    三、vuex的使用

    1. 首先安装vuex的依赖

    1 npm install vuex --save

    2. 在main.js文件中引入vuex

    1 import Vue from "vue"
    2 import Vuex from "vuex"
    3 Vue.use(Vuex)

    3. 在main.js文件的同级创建一个store.js文件

     1 import Vue from "vue"
     2 import Vuex from "vuex"
     3 Vue.use(Vuex)
     4 export default new Vuex.Store({
     5   state:{
     6     name:"初始的name"
     7   },
     8   getters:{
     9     // 第一个参数是state,第二个是getters
    10     dealName(state,getters){
    11       return "处理一下的name,值为:"+state.name
    12     }
    13   },
    14   mutations:{
    15     // 第一个参数是state,第二个参数为提交载荷,emmm,赋值的新值
    16     setName(state,payload){
    17        state.name = payload
    18     }
    19   },
    20   actions:{
    21     // 第一个参数为对象,与store 实例具有相同方法和属性的 context 对象,第二个参数与mutation一样
    22     setNameAction({commit},payload){
    23       commit("setName",payload)
    24     }
    25   }
    26 })

    4. 在main.js文件中引入store.js

    1  import Vuex from "vuex";
    2  import store from "./store";
    3  Vue.use(Vuex);
    4  new Vue({
    5   render: h => h(App),
    6   store
    7  }).$mount('#app');

    5. 在组件中使用store

     1 <template>
     2   <div>
     3 
     4     <div>name:{{name}}</div>
     5     <div>getter处理的name:{{dealName}}</div>
     6     <button @click="changename">改变name</button>
     7   
     8   </div>
     9 </template>
    10 <script>
    11 export default {
    12   name: "index",
    13   computed: {
    14     name() {
    15       return this.$store.state.name;
    16     },
    17     dealName() {
    18       return this.$store.getters.dealName;
    19     }
    20   },
    21   created() {
    22     console.log(this.$store);
    23   },
    24   methods: {
    25     changename() {
    26     // 下面两种方式都可以改变state中name的值,分别是对应action和mutation
    27       // this.$store.dispatch("setNameAction", "action改变name");
    28       this.$store.commit("setName", "mutation改变name");
    29     }
    30   }
    31 };
    32 </script> 

     

     

     6. 将store分割成模块,修改store.js文件

     1 import Vue from "vue";
     2 import Vuex from "vuex";
     3 Vue.use(Vuex);
     4 export default new Vuex.Store({
     5     // 以下store被分割成2个模块,user、application
     6     modules: {
     7         user: {
     8             state: {
     9                 name: "初始的name"
    10             },
    11             getters: {
    12                 // 第一个参数是state,第二个是getters
    13                 dealName(state) {
    14                     return "处理一下的name,值为" + state.name;
    15                 }
    16             },
    17             mutations: {
    18                 // 第一个参数是state,第二个参数为提交载荷,emmm,赋值的新值
    19                 setName(state, payload) {
    20                     state.name = payload;
    21                 }
    22             },
    23             actions: {
    24                 // 第一个参数为对象,与store 实例具有相同方法和属性的 context 对象,第二个参数与mutation一样
    25                 setNameAction({ commit }, payload) {
    26                     commit("setName", payload);
    27                 }
    28             }
    29         },
    30         application: {
    31             state: {
    32                 title: "初始标题"
    33             },
    34             getters: {
    35                 // 第一个参数是state,第二个是getters
    36                 dealTitle(state) {
    37                     // 虽然getter不能接受外面传进的参数,但是我们可以将返回值处理成方法去接受参数
    38                     return (type) => {
    39                         return type + state.title;
    40                     };
    41                 }
    42             },
    43             mutations: {
    44                 // 第一个参数是state,第二个参数为提交载荷,emmm,赋值的新值
    45                 setTitle(state, payload) {
    46                     state.name = payload;
    47                 }
    48             },
    49             actions: {
    50                 // 第一个参数为对象,与store 实例具有相同方法和属性的 context 对象,第二个参数与mutation一样
    51                 setTitleAction({ commit }, payload) {
    52                     commit("setTitle", payload);
    53                 }
    54             }
    55         }
    56     }
    57 
    58 });

    7. 修改一下组件的使用

     1 <template>
     2   <div>
     3     <div>name:{{name}}</div>
     4     <div>getter处理的name:{{dealName}}</div>
     5     <button @click="changename">改变name</button>
     6     <div>title:{{title}}</div>
     7     <div>getter处理的title:{{dealTitle}}</div>
     8   </div>
     9 </template>
    10 <script>
    11 export default {
    12   name: "index",
    13   computed: {
    14     name() {
    15       // name是user模块中的,因此需要user.name
    16       return this.$store.state.user.name;
    17     },
    18     dealName() {
    19       return this.$store.getters.dealName;
    20     },
    21     title() {
    22       return this.$store.state.application.title;
    23     },
    24     dealTitle() {
    25       // dealTitle返回的是个方法,我们可以传参
    26       return this.$store.getters.dealTitle("demo应用的");
    27     }
    28   },
    29   created() {
    30     console.log(this.$store);
    31   },
    32   methods: {
    33     changename() {
    34       // this.$store.dispatch("setNameAction", "action改变name");
    35       this.$store.commit("setName", "mutation改变name");
    36     }
    37   }
    38 };
    39 </script>

  • 相关阅读:
    城市承灾体脆弱性和易损性的影响因素
    《风暴潮、海浪、海啸和海冰灾害应急预案》
    承灾体
    ArcGIS数据存储的方式
    ArcGIS几种数据格式2
    ArcGIS几种数据格式
    【ArcGIS】文件地理数据库,个人地理数据库与ArcSDE的局别
    dojo事件绑定
    Spark最简安装
    Spark 概述
  • 原文地址:https://www.cnblogs.com/grow-up-up/p/12910412.html
Copyright © 2020-2023  润新知