美文网首页
Chapter 2:光速上手vuex

Chapter 2:光速上手vuex

作者: 你单排吧 | 来源:发表于2019-03-09 21:04 被阅读0次

继续上一篇的vuex上手,我们完成了父组件和子组件A、子组件B。那么我们接下来就要将数据抽离出来,放到vuex中实现状态管理。

Step 1:安装vuex

npm install vuex --save

接着在src目录下,新建一个store的文件夹,里面再新建一个index.js文件,然后开始给它加点代码:

/* store/index.js */
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const store = new Vuex.Store({
    state: {
        dataNum: 10
    }
})
export default store

细心的小伙伴肯定发现,我们的dataNum: 10仿佛似曾相识,而且它还被放在state中。没错,等会再来讲这里,我们先去main.js文件把store引进去:

// main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store/index'    // 在这里引入store

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,      // 在这里调用store
  components: { App },
  template: '<App/>'
})

好了,接下来,我们讲一下刚刚绕过的这个知识点:

/* store/index.js */
const store = new Vuex.Store({
    state: {
        dataNum: 10
    }
})

这里的state你可以理解为状态,总而言之它是用来存储数据的,我们有一个叫dataNum的数据,需要在多个组件同时被调用且同时发生变更,那么就需要放在state中。

Step 2:去掉父子组件的冗余代码

App.vue中,data里面的数据删除,整个data删掉也行(本案例用不着了);然后把两个组件中的props都删掉,重新写一下data:

export default {
    data(){
        return{
             dataNum: this.$store.state.dataNum
        }
    }
}

两个组件都是这样写就好。很明显,我们现在是在组件本身上写dataNum,然而,我们这里看到,dataNum的数据其实是这个:

this.$store.state.dataNum

没错,这就是我们获取state中的数据所使用的方法。接下来去网页观看,你会发现数据正常获取,我们接着走下一步。

Step 3:添加点击事件

OK,这里需要着重说明,官方规定修改state中数据的唯一方法是:使用mutations !因此我们先绕开getters,直接进入mutations的学习。
我们在store文件夹下面的index.js中,给mutations添加几个方法:

/* store/index.js */

const store = new Vuex.Store({
    state: {
        dataNum: 10
    },
    mutations: {
        reduceNum(state, payload){  //减少数量
            state.dataNum -= payload;
        },
        addNum(state, payload){   // 增加数量
            state.dataNum += payload;
        },
        changeNum(state, payload){  //修改数量
            state.dataNum = payload;
        }
    }
})
export default store

我们可以看到,每个方法都有两个参数——statepayload,第一个参数是直接引用了state,使我们下面的代码可以直接state.dataNum,而不是this.$store.state.dataNum这么冗余。另一个参数payload,则是从组件发送过来的参数。我们定义这三个方法,分别是为了让数量减少、增加,或者直接修改。我们来看在组件中要怎么调用这些方法,用组件B举例:

<!-- 组件B(BCom.vue) -->
<template>
    <div>
        <input type="text" v-model="getDataNum">
        <button @click="reduceFn">按钮 -</button>
    </div>
</template>
<script>
export default {
    data(){
        return{
            // dataNum: this.$store.state.dataNum
        }
    },
    computed: {
        getDataNum: {  // v-modal中使用这个方法返回的值,每个方法都有get和set
            get(){
                return this.$store.state.dataNum;      // 获取并返回state中的dataNum
            },
            set(val){
                this.$store.commit('changeNum', val);    // 调用mutations中的changeNum方法
            }
        }
    },
    methods: {
        reduceFn(){
            this.$store.commit('reduceNum',1);
        }
    }
}
</script>
<style scoped></style>

同理,组件A也是这么玩。这里需要注意的是,在组件中调用mutations中的方法,需要使用this.$store.commit('方法名',参数)才能调用。注意,这里的参数就是我们上面提到的payload
OK,学到这里你已经上手了,接下来回头去学gettersactions吧,这两个就很容易学会了!

相关文章

  • Chapter 2:光速上手vuex

    继续上一篇的vuex上手,我们完成了父组件和子组件A、子组件B。那么我们接下来就要将数据抽离出来,放到vuex中实...

  • Chapter 1:光速上手vuex

    写在文前:由于篇幅限制,不想一篇文章写太长,所以拆分成两篇,本篇主写样式和结构,大家快速过一眼,直接看下一章也行。...

  • vuex入门实例2

    vuex入门实例2 这章节我准备以requirejs模块化,讲解下如何快速上手vuex 源码地址 工程代码结构如下...

  • vuex 快速上手

    一. 引用 引入Vuex(前提是已经用Vue脚手架工具构建好项目) 1.安装 2、新建一个store文件夹(这个不...

  • 快速上手Vuex

    学过Vue的伙伴们都知道在简单的场景下,父子组件的通信可以用Props完成,孩子组件与父组件之间可以emit(触发...

  • 快速上手vuex

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应...

  • Vuex快速上手

    Vuex快速上手 通俗的解释:是一种最好的非父子组件传值的一种方案。官方解释:Vuex是一个公共状态管理(公共的内...

  • vuex 上手使用

    什么是vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 每一个 Vuex 应用的核心就是...

  • Vuex简单上手

    Vuex Vuex是Vue.js应用的状态管理模式目前开发项目中,主要用于保存组件状态,保证兄弟组件间的通信。 首...

  • Vuex入门到上手

    一、前言 当我们的应用遇到多个组件共享状态时,会需要多个组件依赖于同一状态。传参的方法对于多层嵌套的组件将会非常繁...

网友评论

      本文标题:Chapter 2:光速上手vuex

      本文链接:https://www.haomeiwen.com/subject/daiepqtx.html