vuex记录

作者: agamgn | 来源:发表于2020-01-09 09:47 被阅读0次

前言

官方文档讲vuex讲的很清楚了,本文用于总结vuex的简单使用

简介

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

优点

1.Vuex的状态存储是响应式的:当你的组件使用到了这个Vuex的状态,一旦它改变了,所有关联的组件都会自动更新相对应的数据,这样开发者省事很多。

2.不能直接修改Vuex的状态:如果是个全局对象变量,要修改很容易,但是在Vuex中不能这样做,想修改就得使用Vuex提供的唯一途径:显示地提交(commint)mutations来实现修改。这样做的好处就是方便我们跟踪每一个状态的变化,在开发过程中调试的时候,非常实用。

Vuex的核心

vuex由以下几部分组成:

  • state
  • mutations
  • getters
  • actions
  • modules

state里面就是存放的我们上面所提到的状态
mutations就是存放如何更改状态
getters就是从state中派生出状态,比如将state中的某个状态进行过滤然后获取新的状态,就是是store的计算属性。
actions就是mutation的加强版,它可以通过commit mutations中的方法来改变状态,最重要的是它可以进行异步操作。
modules顾名思义,就是当用这个容器来装这些状态还是显得混乱的时候,我们就可以把容器分成几块,把状态和管理规则分类来装。这和我们创建js模块是一个目的,让代码结构更清晰。

demo.png

如何解释Vuex

state

假设我们需要管理的数据有以下这些

state:{
        list:[],
        showmsg:true,
        msg:"给组件的消息"
}

在组件中获取{{msg}}方式:

export default {
  computed: {
      msg(){
          return this.$store.state.msg;
      }
  }
};

某个时候,某个组件中,我们需要给state中的list添加一个数据,我们肯定得想办法去干成这件事。vuex中就规定了我们必须通过commit mutations中的方法来做这件事。

mutations

state:{
        list:[],
        showmsg:true,
        msg:"给组件的消息"
},
mutations:{
//add会接受 state作为第一个参数,第二个是自定义传参
        add(state,data){
              state.list.push(data);
        }
}

1.字符串参数add官方说是type,其实就是注册的事件名
2.可以是单个参数
3.如果是多个参数,我们则用对象放入,否则会报错
我们在提交commit时候,字符串参数add,就是对应在 mutations中的add。
一般通过方法或钩子触发,例如:

methods: {
   getVal(event) {
     //获取当前的按键的值
     let value = event.target.dataset.value;
     //通过commit提交一个名为increment的mutation
     this.$store.commit("add", value);
   }
 }

getters

某个时间,某个组件我们需要获得list中字符串长度大于10的所有数据,vuex中允许我们通过getters来获取:

state:{
        list:[],
        showmsg:true,
        msg:"给组件的消息"
},
mutations:{
//add会接受 state作为第一个参数,第二个是自定义传参
        add(state,data){
              state.list.push(data);
        }
},
getters:{
          fiterList(state){
                let len=state.list.length,
                     newList;
                for(let i=0;i<len;i++){
                      let element=state.list[i];
                      element.length>10>newList.push(element):null;
                }  
      }
}  

在组件中获取{{list}}方式:

export default {
  computed: {
      list(){
          return this.$store.getters.fiterList;
      }
  }
};  

actions

某个时间,某个组件需要我们需要在事件发生2秒后再向list中添加数据,这个时候我们必须用actions,还记得上面我们提到的吗,只有通过actions处理异步问题:

state:{
        list:[],
        showmsg:true,
        msg:"给组件的消息"
},
mutations:{
//add会接受 state作为第一个参数,第二个是自定义传参
        add(state,data){
              state.list.push(data);
        }
},
getters:{
          fiterList(state){
                let len=state.list.length,
                     newList;
                for(let i=0;i<len;i++){
                      let element=state.list[i];
                      element.length>10>newList.push(element):null;
                }  
      }
}  ,
actions:{
          add({commit,state},data){
                setTimeout(function(){
                      //通过commit mutations中的方法来处理
                        commit("add",data);
                  },2000);
            }
},

然后我们就在组件里这么调用就可以了:

methods: {
   getVal() {
      let data= 26;
      //1.通过dispatch将方法getParamSync和多个参数{name,age,sex}传递给actions
      this.$store.dispatch('add',{data})
   }
 }

module

当代码量不断增多,这个容器的状态和Mutations,actions,getters都太多了时,我们可以把它们按自己的需求进行分类,分成几个module,每个module和上面一样由state,mutations,actions,getters组成:

import a from "./a.js"
import b from "./b.js"
const tore=new Vuex.store({
          moudles:{
                a,
                b
          }
})

辅助函数

vuex提供了辅助函数处理庞大的vuex数据,mapState,mapGetters,mapMutations,mapActions,实际就是把state、getters、mutations、actions整合成一个数组,一次性返回

注:mapState,mapGetters返回的是属性,所以混入到 computed 中,mapMutations,mapActions返回的是方法,只能混入到methods中

mapState(state辅助函数)

当我们的组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余,为了解决这个问题,我们可以使用mapState的辅助函数来帮助我们生成计算属性。mapState函数返回的是一个对象。
1、引入:

import { mapState } from 'vuex

2、在computed属性中来接收state中的数据 接收方式有2种(数组和对象,推荐对象)

          1.computed:Vuex.mapState(["属性"])  
         把state中的数据通过mapState映射到computed组件身上
          2.computed:Vuex.mapState({
            key:state=>state.属性   //优点:1本身key值是别名
        //要的是val的值,key的值a 和 val="a"一样就行,随意写。
             //减少state里面长的属性名。 
        //2可以在函数内部查看state中的数据
          //   数组方式的话,必须按照state中的属性名
          })


        3、如果自身组件也需要使用computed的话,通过解构赋值去解构出来

          computed:{
            ...Vuex.mapState({
               key:state=>state.属性
            })
          }

mapAcions(使用mapActions辅助函数将组件的methods映射成store.dispatch调用)

methods:{
        ...Vuex.mapActions({
            add:"handleTodoAdd",    //val为actions里面的方法名称
            change:"handleInput"     
        })
    }
//直接代用add和change方法就行,不过要记得在actions里面做完数据业务逻辑的操作

之前我们还需要这样写一大串函数调用,

// methods: {
// handleInput(e){           
// let val = e.target.value;


    //         this.$store.dispatch("handleInput",val )
    //     },
    //     handleAdd(){
    //         this.$store.dispatch("handleTodoAdd")
    //     }
    // }

mapMutations(使用mapMutations辅助函数将组件中的methods映射为store.commit调用)

methods: {
  // 将this.tips映射成 this.$store.commit('tips')
  ...mapMutations(['tips'])
}

mapGetters(把getters属性映射到computed身上)

computed: {
  ...mapGetters([
    'oneGetter',
    'anotherGetter'
  ])
}

参考

理解Vuex的辅助函数mapState, mapActions, mapMutations用法

相关文章

  • Vuex 的学习过程记录

    Vuex 的学习记录 资料参考网址Vuex中文官网Vuex项目结构示例 -- 购物车Vuex 通俗版教程Nuxt....

  • vuex记录

    前言 官方文档讲vuex讲的很清楚了,本文用于总结vuex的简单使用 简介 Vuex 是一个专为 Vue.js 应...

  • Vuex

    今天在博客项目中用到了vuex,记录下vuex 的使用方法。Vuex 是一个专为 Vue.js 应用程序开发的状态...

  • vuex使用记录

    副标题:vuex使用详解、vue使用全局变量、vue使用 store 这篇博客主要记录了 vuex的使用方法,简单...

  • Vuex 学习记录

    vuex 是一个专门为 vue.js 应用程序开发的状态管理系统,其功能是将多个组件共享的状态提取出来,然后采用集...

  • vuex用法记录

    Vuex简介 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 State: 驱动应用的数据源; V...

  • Vuex学习记录

    在vue项目中,常常会遇到状态管理的问题。 比如子组件的某一状态的改变会影响到父组件,这时,我们可以运用this....

  • vuex学习记录

    store/index.js main.js HelloWorld.vue 每个属性描述 State vuex中的...

  • vuex低级错误,this.$store提示不存在

    vuex注意点 使用vuex的时候遇到一个低级错误,导致无法使用this.$store,记录一下 在生成store...

  • Vuex

    这两天在做Vue移动端的项目,正好用到了Vuex,记录一下相关知识。 一、安装 npm yarn Vuex是Vue...

网友评论

    本文标题:vuex记录

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