Vuex 总结

Vuex 概述

Vuex 用来管理全局数据,方便实现组件间的数据共享,数据集中管理有以下三点好处:

  1. 易于后期开发和维护
  2. 高效实现数据共享,提高开发效率
  3. 能够实现数据实时同步

注意:只有需要共享的数据才有必要存入 Vuex 中

Vuex 的基本使用

  1. 安装Vuex依赖包
npm install vuex --save
  1. 导入Vuex
import Vuex from 'vuex'
Vue.use(Vuex)
  1. 创建 store 对象
const store = new Vuex.Store({
    // state 中存放的就是要共享的数据
    state: {
        count: 0
    }
})
  1. store 实例挂载到 Vue 实例中
new Vue({
    el: '#app',
    render: h => h(app),
    router,
    store
})

Vuex 的核心概念

state

state 是唯一公共数据源,存放所有的公共数据,有两种访问方法

  1. this.$store.state.数据名

  2. 将全局数据,映射为当前组件的计算数属性

    1. 从 Vuex 中导入 mapState 函数

    2. 将全局数据映射为当前组件的计算属性

import { mapState } from 'vuex'

computed: {
  ...mapState(['count'])
}
mutation

mutation 用于修改 store 中的数据, Vuex 中不推荐组件中直接通过 methods 修改 store 中的数据,需要借助 mutation 来实现,此操作虽然繁琐,但可以集中监控数据变化:

  1. 定义 mutation
mutations: {
  // 定义时间处理函数,变更数据
  // 第一个参数是state,第二个参数是自定义参数
  add(state, n) {
    state.count += n
  }
}
  1. 触发 mutation 有两种方式:
// 第一种方式:利用 commit 提交
methods: {
  doAdd() {
    // 第一个参数是函数名,第二个参数是自定义参数
    this.$store.commit('add', 3)
  }
}

// 第二种方式:将 mutations 方法映射为当前组件的 methods 方法
import { mapMutations } from 'vuex'

methods: {
  ...mapMutations(['add', 'sub'])
}

注意:mutation 函数中不能执行异步操作

action

专门处理 Vuex 中的异步操作,但还是要通过 mutation 来操作数据

  1. 定义 action
action: {
  // 第一个参数是 store 实例
  addAsync(content, n) {
    setTimeOut(function () {
      content.commit('add', n)
    }, 1000)
  }
}
  1. 触发 action 有两种方式:
// 第一种方式:利用 dispatch
methods: {
  add() {
    this.$store,dispatch('addAsync', 3)
  }
}

// 第二种方式:将 actions 方法映射为当前组件的 methods 方法
import { mapActions } from 'vuex'
methods: {
  ...mapActions(['addAsync'])
}
getter

store 中的数据进行加工处理,形成新的数据(不会修改原数据),当 store 中的数据发生变化,getter 的数据也会发生变化,类似于计算属性 computed

  1. 定义 getter
getter: {
  showNum(state) {
    return '当前最新数量是【' + state.count + '】'
  }
}
  1. 访问 getter,有两种方式

    1. this.$store.getters.名称

    2. 将全局数据映射为当前组件的计算属性

import { mapGetters } from 'vuex'
computed: {
  ...mapGetters(['showNum'])
}
vuex的modules是用来将store分割成模块的功能。每个模块都有自己的state、mutation、action和getter,并且可以嵌套子模块。\[2\]通过使用modules,可以将应用的状态进行模块化管理,使得代码更加清晰和可维护。在使用modules时,可以将根模块放在modules文件夹的外面,也可以放在里面,最后在index文件中进行整合。\[1\]在index.js文件中,可以通过import语句引入子模块,并在modules对象中进行注册。\[3\]每个子模块都可以有自己的状态参数、mutations、actions和getters,并且可以通过命名空间来进行区分。\[2\]通过使用modules,可以更好地组织和管理vuex状态。 #### 引用[.reference_title] - *1* *3* [vue - vuex详细讲解和modules模块化的使用](https://blog.csdn.net/qq_43886365/article/details/126893817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [vuex总结(六)——module](https://blog.csdn.net/weixin_47450807/article/details/123104614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值