首页 > 其他分享 >5.VueX

5.VueX

时间:2023-04-26 23:14:13浏览次数:40  
标签:... 调用 对象 VueX 方法 state 写法

5.VueX

5.1.简介

5.1.1.介绍

概念以及作用:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对 vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

使用场景:

  1. 多个组件依赖于同一状态
  2. 来自不同组件的行为需要变更同一状态

5.1.2.纯vue版的计数器

效果图

image-20230425192752120

代码示例

image-20230425192823582

5.1.3.Vuex工作原理

①原理图

vuex

②state

vuex管理的状态对象

它应该是唯一的

//代码示例
const state = {
    xxx:initValue
}

③Actions

值为一个对象,包含多个响应用户动作的回调函数

通过commit( )来触发mutation中函数的调用, 间接更新state

如何触发actions中的回调: 在组件中使用$store.dispatch('对应的action回调方法名',数据)

可以包含异步代码(定时器ajax等)

//代码示例
const actions = {
    zzz({commit,state},data1){
        commit('yyy',{data1})
    }
}

④Mutations

值是一个对象,包含多个直接更新 state 的方法

组件中使用$store.commit('对应的mutations回调方法名',数据)

action中使用:action能调用mutations中的方法:commit(对应的mutations方法名)

mutations中方法的特点:不能写异步代码、只能单纯的操作state

//代码示例
const mutations = {
    yyy(state,{data1}){
        //更新state的某个属性
    }
}

⑤getters

类似于一个全局的计算属性

值为一个对象,包含多个用于返回数据的函数

使用:$store.getters.mmm

//代码示例
const getters = {
    mmm(state){
        return state.msg + '!'
    }
}

⑥modules

包含多个module,一个module是一个store的配置对象,与一个组件(包含有共享数据)对应

5.2.入门

5.2.1.搭建环境

安装vuex3:`npm i vuex@3,匹配vue2

安装vuex4:`npm i vuex,匹配vue3

导入vueximport vuex from 'vuex'

使用vuexVue.use(vuex)

代码示例

index.js

image-20230425213152368

main.js

image-20230426225145266

5.2.2.vuex版的计数器

效果图

image-20230426002019073

代码示例

count

image-20230426002040859

main.js

image-20230426002053486

执行流程

image-20230426002325282

mutations的方法名字最好大写,以便于区分

commit对接的是mutations

dispatch对接的是actions

5.3.四个map方法

四个方法中的对象写法数组写法的简写和使用方式都是差不多的

5.3.1.mapState

作用:用于映射state中的数据为计算属性

使用

  1. 对象写法:...mapState({对象名1:'调用的对象名1',对象名2:'调用的对象名2'})
    • 这种写法没有简写方式
  2. 数组写法:...mapState([对象名1:'调用的对象名1',对象名2:'调用的对象名2'])
    • 如果对象名调用的对象名是一致的,可以简写:...mapXXX(['对象名1',对象名2'])

代码示例

image-20230426172234748

黄色框的写法是将上面红色框中相同的部分(this.$store.state)提取出来,这个写法需要导入vuex提供的函数mapState

5.3.2.mapGetters

与上面mapState函数使用一致,只是名字不同

作用:用于映射getters中的数据为计算属性

使用

  1. 对象写法:...mapGetters({对象名1:'调用的对象名1',对象名2:'调用的对象名2'})
    • 这种写法没有简写方式
  2. 数组写法:...mapGetters([对象名1:'调用的对象名1',对象名2:'调用的对象名2'])
    • 如果对象名调用的对象名是一致的,可以简写:...mapXXX(['对象名1',对象名2'])

代码示例

image-20230426172843042

将相同的代码(this.$store.getters)提取出来,这个写法需要导入vuex提供的函数mapGetters

5.3.3.mapMutations

与上面mapState、mapGetters函数使用一致,只是名字不同

作用:用于帮助我们生成与mutations对话的方法

使用

  1. 对象写法:...mapMutations({方法名1:'调用的方法名1',对象名2:'调用的方法名2'})
    • 这种写法没有简写方式
  2. 数组写法:...mapMutations([方法名1:'调用的方法名1',对象名2:'调用的方法名2'])
    • 如果对象名调用的对象名是一致的,可以简写:...mapXXX(['方法名1',方法名2'])

代码示例

image-20230426180633151

将相同的代码(this.$store.commmit)提取出来,这个写法需要导入vuex提供的函数mapMutations

5.3.4.mapActions

与上面mapState、mapGetters、mapMutations函数使用一致,只是名字不同

作用:用于帮助我们生成与actions对话的方法

使用

  1. 对象写法:...mapActions({方法名1:'调用的方法名1',对象名2:'调用的方法名2'})
    • 这种写法没有简写方式
  2. 数组写法:...mapActions([方法名1:'调用的方法名1',对象名2:'调用的方法名2'])
    • 如果对象名调用的对象名是一致的,可以简写:...mapXXX(['方法名1',方法名2'])

代码示例

image-20230426180700551

将相同的代码(this.$store.dispatch)提取出来,这个写法需要导入vuex提供的函数mapActions

注意:使用mapActionsmapMutations方法使用时,若需要传递参数需要: 在模板中定事件时传递好参数否则参数是事件对象

5.3.5.加强版的计数器

效果图

image-20230426180851454

代码示例

index.js

image-20230426180211467

Count

image-20230426180827631

5.4.模块化+命名空间

将每一个功能的mutationactionsstategetters方法进行模块化管理

使用

  1. index.js文件中进行分类

    const xxx = {
        //命名空间
        namespaced:true,
        mutation{},
    	actions{},
        state{}
    }
    
    // 创建并且暴露store
    export default new Vuex.Store({
        // 配置模块对象
        modules:{
            // 这里只需要配置对象名
            xxx
        }
    })
    
  2. 在组件中使用

    1. ...mapXXX方式

      //在原本的方式前面添加一个模块名参数即可
      ...mapXXX('模块化名字',['方法名1','方法名2'])
      
    2. 普通写法

      //这种写法的获取方式有点奇怪
      方法名(){
          return this.$store.getters['模块化名字/方法名'];
      }
      

代码示例

index.js

image-20230426205746663

count

image-20230426211415725

标签:...,调用,对象,VueX,方法,state,写法
From: https://www.cnblogs.com/Myvlog/p/17357661.html

相关文章

  • Vuex
    Vuex概念在Vue中实现集中式状态(数据)管理的一个Vue的插件,对Vue应用中多个组件的共享状态进行集中式管理(读/写),也是一种组件间通信的方式,且适用于任意组件间的通信。使用场景多个组件需要共享数据时。搭建Vuex环境ps:vue2只能使用Vuex3,Vue3只能使用Vue41.创建文件:src/sto......
  • 动力节点⑤章 vuex——vue视频笔记
    5Vuex5.1vuex概述vuex是实现数据集中式状态管理的插件。数据由vuex统一管理。其它组件都去使用vuex中的数据。只要有其中一个组件去修改了这个共享的数据,其它组件会同步更新。一定要注意:全局事件总线和vuex插件的区别:全局事件总线关注点:组件和组件之间数据如何传递,一个绑定$......
  • npm i vuex-persistedstate安装失败怎么办
    在安装vuex的插件vuex-persistedstate来支持vuex的状态持久化时,出现如下报错: 在这里给大家提供一个解决方法,输入此行命令即可成功安装:npminstall--savevuex-persistedstate-f  ......
  • vuex的使用
    目录简介vuex的环境调用逻辑定义vuex中的内容简介官网:https://vuex.vuejs.org/zh/在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。Vuex是一个专为Vue.js应用程序开发......
  • vuex存储和本地存储(localstorage、sessionstorage)的区别
    1.最重要的区别:vuex存储在内存,localstorage则以文件的方式存储在本地2.应用场景:vuex用于组件之间的传值,localstorage则主要用于不同页面之间的传值。3.永久性:当刷新页面时vuex存储的值会丢失,localstorage不会。注:很多朋友觉得用localstorage可以代替vuex,对于不变的数据确实可......
  • Vuex
    1.概念在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信2.何时使用?多个组件需要共享数据时3.搭建vuex环境创建文件:src/store/index.js//引入vue......
  • Vuex笔记
    Vuex有state,mutation,actions,getter四种用法如下:1、state(存储数据):state{count:0//全局数据}获取state数据两种方式:this.$store.state.全局数据名称利用辅助函数mapstateImport{mapState}from“vuex”computed:{…mapstate([“全局数据名称”])}2、mutation(更......
  • Vuex module之间调用与读值
    对于模块内部的mutation和getter,接收的第一个参数是模块的局部状态对象state对于模块内部的action,局部状态通过context.state暴露出来,根节点状态则为context.rootState使用全局state和getter,rootState和rootGetters会作为第三和第四参数传入getter,也会通过conte......
  • vuex store
    一,vuex:状态管理(集中式存储应用的所有组件的状态)vuex是vue的插件store:商店二,vuex有那些属性staste:{}-------------用来放数据的,类似于组件中的datagetters:{}-------------就是一个计算属性[类似于组件中的computed]mutations:{}-----------就是一个存放方法的[类似......
  • vuex
    笔记脚手架文件结构├──node_modules├──public│├──favicon.ico:页签图标│└──index.html:主页面├──src│├──assets:存放静态......