vuex的使用

什么是Vuex?

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

人为理解:Vuex是用来管理组件之间通信的一个插件

为什么要用Vuex?

 我们知道组件之间是独立的,组件之间想要实现通信,我目前知道的就只有props选项,但这也仅限于父组件和子组件之间的通信。如果兄弟组件之间想要实现通信呢?嗯..,方法应该有。抛开怎么实现的问题,试想一下,当做中大型项目时,面对一大堆组件之间的通信,还有一大堆的逻辑代码,会不会很抓狂??那为何不把组件之间共享的数据给“拎”出来,在一定的规则下管理这些数据呢? 这就是Vuex的基本思想了。

怎么使用Vuex?(安装vuex之后)

import Vue from 'vue' 
import Vuex from 'vuex'  //引入vuex  vuex是基于vue存在的

let store = new Vuex.Store({
    state,
    mutations,
    getters,
    actions
})
//创建vuex实例

new Vue({
  el: '#app',
  router,
  store, //并在vue实例中挂载
  render: h => h(App)
})

  

new Vuex.Store({}) 表示创建一个Vuex实例,通常情况下,他需要注入到Vue实例里. Store是Vuex的一个核心方法,字面上理解为“仓库”的意思。Vuex Store是响应式的,当Vue组件从store中读取状态(state选项)时,若store中的状态发生更新时,他会及时的响应给其他的组件(类似双向数据绑定) 而且不能直接改变store的状态,改变状态的唯一方法就是,显式地提交更改(mutations选项)

Vuex有4个核心选项:state mutations  getters  actions   

state的使用 :用来存放组件之间共享的数据。他跟组件的data选项类似,只不过data选项是用来存放组件的私有数据。

let state = {
    count : 0,
 
}
//在state这个对象中存放一个数据

//在标签中用this.$store.state.count输出

<p>
            {{this.$store.state.count}}
 </p>

 mutation的使用 :在 Vuex store 中,实际改变 状态(state) 的唯一方式是通过 提交(commit) 一个 mutation。  mutations下的函数接收state作为参数,接收一个叫做payload(载荷)的东东作为第二个参数,这个东东是用来记录开发者使用该函数的一些信息,比如说提交了什么,提交的东西是用来干什么的,包含多个字段,所以载荷一般是对象(其实这个东西跟git的commit很类似)还有一点需要注意:mutations方法必须是同步方法

//在组件中想要使用方法 给state中的数据+10,但是在method中写的只是改变了视图上的值,并不是数据本身
<p>
         {{this.$store.state.count}}
  </p>
  <p>
          <button @click="add">+10</button>
  </p>

methods: {
        add(){
            //将这个方法提交给oadd这个方法
            this.$store.commit('oadd',10)
        },
  },


//在mutations中 写oadd
let mutations = {
    oadd(state,n){
        state.count+=n
    },

}   

 getters的使用:类似于vue的计算属性

//在state中有一个数组
let state = {
   arr : [1,2,3,4,5,6],

}

在getters中这个数组进行逻辑编写
let getters = {
    doarr : state=>{
        return state.arr.map(item => {
            return item*10
        });
    }
}

在组价中输出
<p>
       {{this.$store.getters.doarr}}
 </p>

action的使用 :

actions和mutations的区别

1.Actions 提交的是 mutations,而不是直接变更状态。也就是说,actions会通过mutations,让mutations帮他提交数据的变更。

2.Action 可以包含任意异步操作。

let state = {

    color : "red"

} //在state定义一个color数据

//在视图中使用这个颜色数据
<p class="color" :style="{color:this.$store.state.color}">
       color
 </p>
 <p>  //点击按钮三秒后换字体颜色
      <button @click="change">change</button>
 </p>

//先在method中将方法使用disoatch给actions里定义的thechange
 methods: {
        change(){
            this.$store.dispatch('thechange')
        }
    },


//在mutations中写逻辑代码
let mutations = {
    ochange(state){
        state.color = "pink"
    }
}

//在actions中实现这个异步方法
let actions = {
    thechange({commit}){
        setTimeout(()=>{
            commit('ochange')
        },3000)
    }
}

  

 

原文地址:https://www.cnblogs.com/qinlinkun/p/11385061.html