美文网首页
vuex有哪几种属性?使用及作用及应用场景

vuex有哪几种属性?使用及作用及应用场景

作者: CoderZb | 来源:发表于2021-09-25 10:03 被阅读0次

vuex有哪几种属性?

五种种属性:state、getters、mutations、actions、modules

  • state、getters、mutations、actions、modules这五个属性,以如下三行代码来开始进行解释
// 同步赋值操作: 触发mutations中的handleUserLimit方法,从而改变state中的user_limit的值
this.$store.commit('handleUserLimit','1');
// 同步赋值操作:触发mutations中的handlesearchPhone方法,从而改变state中的search_phone的值
this.$store.commit('handlesearchPhone','17777777777');  
// 异步赋值操作
this.$store.dispatch("setUserInfo", JSON.stringify({name:'coderZb',sex:'1'}));              
1、state

state : 数据源(相当于数据库)

state: {
 user_limit: '' || localStorage.getItem('user_limit'),
 search_phone: '' || localStorage.getItem('search_phone'),
 user_info:'' || localStorage.getItem('userInfo'),
},

2、getters

getters : 按需取出数据源中的数据

getters: {
   userLimit: (state) => state.user_limit,
   search_phone: (state) => state.search_phone,
   user_info_getters: (state) => state.user_info,
}

3、mutations

mutations :mutations是更新store中数据的唯一途径,且是同步操作,不是异步的。mutations中 用户自定义的函数有一个特点,会接收一个以state为第一参数的回调函数。也就是说,前面两个stategetters都是状态值本身,mutations才是改变状态的执行者。

mutations: {
   // 修改user_limit,并将user_limit存入localStorage
   handleUserLimit: (state, user_limit) => {
     state.user_limit = user_limit
     localStorage.setItem('user_limit', user_limit)
   },
   handlesearchPhone: (state, search_phone) => {
      state.search_phone = search_phone
      localStorage.setItem('search_phone', search_phone)
   },
   userInfoFunc: (state, user_info) => {
       state.user_info = user_info
       localStorage.setItem('userInfo', user_info)
   },
 },

4、actions

actions: 和mutations的不同的是,actions支持异步和同步的操作,mutations只支持同步的操作。
当写上this.$store.dispatch('setUserInfo',xx)代码后,先执行actions,再执行mutations。即执行actions包裹的mutations中的userInfoFunc函数。


以下setTimeout(function () { }, 3000)代码模拟的异步操作我给注释后,那么this.$store.dispatch('setUserInfo',xx)this.$store.commit('setUserInfo',xx)就一样了,都是同步操作。所以关键要看actions中的自定义函数你是如何写的。

actions:{
  setUserInfo({commit}, playload) {
  // setTimeout(function () { // 每3秒执行一次commit()来模拟异步操作
   commit("userInfoFunc", playload)// 同步执行mutations中的userInfoFunc函数
 // }, 3000)
  }
}

等同

actions:{
  setUserInfo(context, playload) {
  // setTimeout(function () { // 每3秒执行一次commit()来模拟异步操作
    context.commit("userInfoFunc", playload) // 同步执行mutations中的userInfoFunc函数
 // }, 3000)
  }
}
5、modules

modules 模块化Vuex。即每一个模块都有每个模块自己的state、getters、mutations、actions。大型项目需要这种模块化,相当于每个模块都有自己的数据库,不用同时操作同一个文件,也避免代码冲突。


使用

  • 1.调用commit或者dispatch进行数据存储
// 同步赋值操作: 触发mutations中的handleUserLimit方法,从而改变state中的user_limit的值
this.$store.commit('handleUserLimit',res.data.data.body.isHost);
// 同步赋值操作:触发mutations中的handlesearchPhone方法,从而改变state中的search_phone的值
this.$store.commit('handlesearchPhone',res.data.data.manager.searchPhone);  
// 异步赋值操作
this.$store.dispatch("setUserInfo", JSON.stringify({name:'coderZb',sex:'1'}));  
  • 2.取出数据
<template>
  <div class="shop_content"></div>
</template>

<script>
import { mapGetters } from 'vuex'
export default {
  data() {
    return {}
  },
  computed: {
    ...mapGetters(['user_info_getters','userLimit']),
  },
  created() {
    console.log('用户信息---取法A---', this.user_info_getters)// 需要引入{ mapGetters } 并应用到computed:{}中
    console.log('用户信息---取法B---', this.$store.getters.user_info_getters)
    console.log('用户信息---取法C---', this.$store.state.user_info)

    console.log('权限---取法A---', this.userLimit)
    console.log('权限---取法B---', this.$store.getters.userLimit)
    console.log('权限---取法C---', this.$store.state.user_limit)
    
    //  不可以用下面的取法。取的是getters里面的属性 不是state里面的属性
    console.log('错误取法', this.$store.getters.user_info)
   
  },
}
</script>

打印结果


image.png

作用:

将 state 作为数据中心、各个组件共享 state 实现跨组件通信的

应用场景

1、公共数据(多个页面都会用到的的公共数据。例如用户的token,用户信息等)
2、非父子组件间的通信(跨组件、毫无关系的N个页面)

PS:父子组件的通信通过以下两种方式:
1.使用prop 属性实现父组件向子组件传递数据;
2.在子组件中通过$emit向父组件传递数据(例如 this.$emit('mapclick', event.latLng))

相关文章

  • vuex有哪几种属性?使用及作用及应用场景

    vuex有哪几种属性? 五种种属性:state、getters、mutations、actions、modules...

  • vuex常见面试题

    1.vuex是什么?怎么使用?哪种功能场景使用它? 2.vuex有哪几种属性 3.不使用Vuex会带来什么...

  • vuex常见面试题

    (答案待更新...) 1.vuex是什么?怎么使用?哪种功能场景使用它? 2.vuex有哪几种属性 3.不使用Vu...

  • Vuex状态管理模式的面试题及答案

    Vuex状态管理模式的面试题及答案 1、vuex有哪几种属性? 答:有五种,分别是 State、 Getter、M...

  • JDK多任务执行框架

    1、为什么要使用线程池?2、线程池有什么作用?3、说说几种常见的线程池及使用场景。4、线程池都有哪几种工作队列?5...

  • 线程池面试题

    1、为什么要使用线程池?2、线程池有什么作用?3、说说几种常见的线程池及使用场景。4、线程池都有哪几种工作队列?5...

  • vuex的基本概念

    一、什么时候使用Vuex 如果应用比较简单,就不需要使用Vuex,直接使用父子组件传值及及它传值方式即可,使用Vu...

  • vuex

    一、什么时候使用Vuex 如果应用比较简单,就不需要使用Vuex,直接使用父子组件传值及及它传值方式即可,使用Vu...

  • 前端常见面试题六

    目录: 1、什么是Vuex?详述Vuex的工作流程 2、详述Vuex的核心属性及使用 3、vue和jquery的区...

  • vue - vuex 使用进阶(一)

    目录: 核心概念使用方法及场景:statemutationsactionsgetters 多页面公用vuex实例在...

网友评论

      本文标题:vuex有哪几种属性?使用及作用及应用场景

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