vue状态机vuex的简单使用(入门)

在运用vuex的前提是必须对vue有一定的认识.以及vue-router的简单使用本篇文章在上文的基础上对vuex做一个简单使用的小案例。

介绍

首先需要了解的就是vuex状态管理机,实际上相当于一个store仓库,这个仓库放置的时一些需要在多个场合被调用的一些状态(state),也就是相当于一些共享属性,并且vuex的状态存储是响应式的,就是说如果store中的状态state发生改变,这个改变会动态体现在你调用这个state的组件中;另一个就是你不能够直接去改变store中的状态,唯一的办法就是通过提交突变(mutation),这样有利于我们跟踪每一个状态的改变,从而更加了解我们的应用。
下面让我一起来使用它:

1.安装

你需要下载vuexnpm install vuex --save

<script src="./vuex.min.js"></script>

或者直接通过cdn来引用它

<script src="https://cdn.bootcdn.net/ajax/libs/vuex/0.4.1/vuex.min.js"></script>

注意:vuex是基于promise的,有的浏览器不支持promise(如IE),那么你直接换一个浏览器如Google或者firefox.
如果你使用vue-cli已经搭建一个框架,那么你还需要显示声明它

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

2.创建一个仓库store

// 新建一个仓库
    // 实例化vuex
    var store = new Vuex.Store({
        // 存储共享的数据 // 状态机
        state:{
            a:{}
        },
        // 获取数据
        getters:{

        },
        // 突变
        mutations:{
            // 同步修改数据
            resetA(state,a){
                state.a = a;
            }
        },
        // 动作
        actions:{
            // 异步操作
             findA(context,data){
            	//在执行findA的时候可以通过data传参
                // 进行异步操作,并且将返回的结果通过赋值给a
                //context是上下文的意思,和store一样,但又不是store,通过commit()进行提交突变,改变a的值
                context.commit('resetA',a);
            }                   
        }

    })

简单粗暴直接创建完之后,现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:

store.commit('increment')

console.log(store.state.count) // -> 1

**注意:**触发状态变更的操作应当在actions当中

3.如果你想要在vue实例当中访问store你需要在vue实例当中注入store,并且使用this.$store来访问他们的property

new Vue({
  el: '#app',
  //注入store
  store: store,
})

4.我们可以在提交一个变更在actions当中

methods: {
  increment() {
    this.$store.commit('increment')
    console.log(this.$store.state.count)
  }
}

5.我们最终还是要做一个异步操作的,以前在vue实例当中我们直接在methods当中实现就行,如:

 methods:{
            login(){
                            
            },
            logout(){
               
            }
        },

而现在我们的异步操作放在actions当中,那么我们应该怎么让他去执行呢?
这个时候就需要我们的this.$store.dispatch()方法去分发这个异步操作,让他执行,而把它放在vue实例当中的methods中的方法中就可以像以前那样绑定给一个事件就可以执行了。

 methods:{
            login(){
               
                this.$store.dispatch("login",this.list).then((res)=>{
                   
            })
            
            },
            logout(){
                            
            }
        },

6.有时我们需要对store中state中的数据进行操作,如数据a

computed:{
            a(){
                return this.$store.state.a;
            }
        },

或者你可以通过getters拿到

computed:{
            newA(){
                return this.$store.getters.newA;
            }
        },

我们还可以通过状态机的辅助函数获取
使用这种方式就会非常简单
使用辅助函数的后会完全脱离对this.$store的操作

//需要把mapState从vuex中解构出来
import { mapState } from 'vuex'

computed: {
	...mapState(["a"])
    // 映射 this.a 为 store.state.a    
}

对于getters和actions和state类似,
通过mapGetters和mapActions这两个辅助函数实现。
不同的是mapActions写在方法中即methods。
通过this.方法名直接调用,而不是通过this.$store.dispatch进行调用。

猜你喜欢

转载自blog.csdn.net/weixin_49549509/article/details/108681259