Vue学习笔记 在模块化开发中使用Vuex

Vue Vuex使用新手入门版,vuex模块化使用,高手进阶版! vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,它相当于一个公共仓库,保存着所有组件都能共用的数据。 那么,我们一起来看看vue项目怎么使用它吧。(如果你对vuex有一定了解,不是刚接触的小白,请忽略第一步,直接查看第二步) 一、适合初学者使用,保存数据以及获取数据 1、在store文件夹,新建个index.js文件(命名看个人习惯,如果没有该文件夹,可以新建一个,当 阅读详情

在使用vue的时候,如果需要对整个页面的数据进行修改,往往要从触发事件的子组件,用emit向上传递到值所在的父组件,如果组件繁多的话,中间的组件只是起到传递方法的作用,代码会显得很琐碎,所以对于这种情况,我们可以考虑将需要进行更新的数据放在一个全局的地方,将对数据的更新操作也放在全局,在组件中只要去调用这个全局的内容就可以了,Vuex实现了这一功能。

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

在我的理解看来,Vuex实际上就是将数据及对数据的更新放在一个全局位置供所有组件去调用,这样就不用对那些过多组件的应用写上一大段琐碎的代码了。

Vuex有几个核心的概念,state,getters,mutation,actions,module,看一个简单的架构

直接创建对象

const store = new Vuex.Store({
  module: {
    // ...
  },
  state: {
    // ...
  },
  getters: {
    // ...
  },
  mutations: {
    // ...
  },
  actions: {
    // ...
  },
})

模块化开发

// store对象所在的文件
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);
const store = new Vuex.Store({
    modules: {
        // ...
    }
});

export default store;


// 要导入的模块所在的文件
const state={
    // ...
}

const getters={
    // ...
}

const mutations={
    // ...
}

const actions={
    // ...
}

export default { state , getter , mutations , actions }

下面说说在模块化开发中如何去使用Vuex

使用vue-cli创建项目后,下载vuex的依赖包,在src文件夹下新建store文件夹来存放数据,在store下建一个module和一个index.js

要在模块化开发中使用Vuex,如果子组件要使用Vuex中的数据,那根组件必须导入store对象

新建一个count组件,在app.vue中引入该组件并导入store对象

App.vue

<template>
  <div id="app">
      <Count></Count>
  </div>
</template>

<script>
import store from '../../store'
import Count from 'components/count.vue'

export default {
  name: 'app',
  components: {
    Count
  },
  store
}
</script>

<style>

</style>

count.vue

<template>
    <div>
        <span>{{count}}</span>
        <button>add</button>    
    </div>
</template>

<script>

export default {

}
</script>

<style>

</style>

在store下的module下建一个count.js放置要用到的数据,在index.js中配置对应的内容

index.js

import Vue from 'vue';
import Vuex from 'vuex';
import count from './modules/count';

Vue.use(Vuex);
const store = new Vuex.Store({ // 注意这里的Store的s要大写,不然会报错
    modules: {
        count
    }
});

export default store;

count.js

const state = {

}

const getters = {

}

const mutations = {

}

const actions = {

}

export default { state, getter, mutations, actions }

 

State

state,状态,是存放数据的地方,我们将数据放在state

因为Vuex的状态存储是响应式的,所以我们要在computed中获取这个数据,当数据更新时也能对应更新

在count.js的state中写入数据

const state = {
    count: 0
}

count.vue中在计算属性中导入该值

// count.vue

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

这样就可以将state中的数据在count.vue中使用,担如果我们需要state的多个数据,这样写显得代码有点冗余,所以我们可以借用mapState辅助函数来导入数据

export default {
    computed:mapState({
        count:state=>state.count.count
    })
}

因为mapState返回的是一个对象,要在computed中同时写入其他值,可以使用扩展运算符来将mapState返回的对象内容放到computed中

export default {
    computed:{
        ...mapState({
            count:state=>state.count.count
        })
    }
}

getters

在获取count时,我们可以发现是state.count.count而不是state.count,state.count实际上是调用了conut.js返回的对象,如果我们要更方便地获取数据或者对其做一些过滤处理,可以使用getter来处理

count.js

const getters = {
    getCount(state) {
        return `${state.count}次`
    }
}

count.vue

export default {
    computed:{
        count(){
            return this.$store.getters.getCount
        }
    }
}

当然,对于getters也有一个辅助函数用于解决导入较多数据时的冗余问题,mapGetters

import { mapGetters } from "vuex"

export default {
    computed:{
        ...mapGetters({
            count:"getCount"
        })
    }
}

mutation

mutation用于改变改变状态,简单说就是改变state中的属性的值。在Vuex中只能在mutation中改变值

count.js

const mutations = {
    add(state) {
        state.count++;
    }
}

count.vue

<template>
    <div>
        <span>{{count}}</span>
        <button @click="$store.commit('add')">add</button>    
    </div>
</template>

若要在方法中传入一个参数(在文档中写为载荷),直接跟在参数state后即可

count.js

const mutations = {
    add(state, n) {
        state.count += n;
    }
}

count.vue

<template>
    <div>
        <span>{{count}}</span>
        <button @click="$store.commit('add',2)">add</button>    
    </div>
</template>

要注意的是,mutation只能是同步函数,因为devtools要在执行mutation时记录提交前后的状态,如果是异步函数,我们无法知道状态到底什么时候会发生改变,也就无法记录状态了,要使数据修改在异步的情况下进行,要借助于actions来触发mutation里面的数据修改

actions

上面说过了,要异步修改数据,只能在actions中实现,这里写一个简单的异步修改

count.js

const actions = {
    add(context) {
        // context是一个与store对象有相同方法和属性的对象
        setTimeout(() => {
            context.commit('add', 2);
        }, 500);
    }
}

这里真正修改数据的还是在mutation中,只是在action中通过使用异步提交的形式,达到异步修改数据的结果

count.vue (actions使用store.dispatch来触发)

<template>
    <div>
        <span>{{count}}</span>
        <button @click="$store.dispatch('add')">add</button>    
    </div>
</template>

要对每个方法都使用dispatch分发过于麻烦,Vuex也提供了辅助函数mapActions来解决这个问题

count.vue

<template>
    <div>
        <span>{{count}}</span>
        <button @click="add">add</button>    
    </div>
</template>

<script>
import { mapGetters ,mapActions } from "vuex"

export default {
    computed:{
        ...mapGetters({
            count:"getCount"
        })
    },
    methods:{
        ...mapActions([
            'add'
        ])
    }
}
</script>

<style>

</style>

在count.js中,可以看到每次调用mutations的时候都要加个context.xx很麻烦,所以可以使用参数解构来简化代码

const actions = {
    add({ commit }) {
        setTimeout(() => {
            commit('add', 2);
        }, 500);
    }
}

 

最新Mamba环境配置教程:从CUDA到causal-conv1d的完整安装流程 本文提供最新Mamba环境配置教程,涵盖从CUDA到causal-conv1d的完整安装流程。针对深度学习领域的长序列处理需求,详细指导如何正确配置CUDA工具链、安装PyTorch及关键依赖causal-conv1d,解决常见报错问题,并验证mamba-ssm集成效果。 阅读详情

相关推荐

工业视觉光源频闪控制的三种核心模式与选型实战

本文深入解析工业视觉系统中光源频闪控制的三种核心模式:光源主控、相机主控与硬同步。针对高速飞拍、缺陷检测等场景,详细对比了各模式的时序原理、硬件要求与适用场景,并提供了基于产线速度与检测需求的实战选型指南,帮助工程师有效消除运动模糊、提升成像质量与系统稳定性。

weixin_29299807的博客 440

vue3 分模块打包 可单个模块打包,或者所有资源一起打包部署

vue3 分模块打包 可单个模块打包,或者所有资源一起打包部署

qq_36958916的博客 6007

ESD放电模式以及电源箝位 (power clamp )电路

由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工作将输出端Vout电压上拉到高电位。从而Vg端的高电位触发导通了NMOS元件(Mesd)的晶体管,因而ESD电流便经由Mesd而泄放掉。由于晶体管Mesd的栅极导通

DOG_BITE_DOG的博客 2万+

vue axios 在main.js公共模块 里引入,不用每个模块都引用的方法

main.js import Vue from 'vue' import App from './App.vue' import router from './router' import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$axios = axios // 将请求模块挂载到实例模型上 new Vue({ router, render: h => h(App) }).$mount('#app'

weixin_44166439的博客 2432

手把手教你用MOS管设计双电源自动切换电路(附零压降方案)

本文详细介绍了使用MOS管设计双电源自动切换电路的完整方案,包括基础电路拓扑、零压降优化设计及实战调试技巧。针对外接电源与电池供电的无缝切换需求,提供低损耗MOS管选型建议和性能实测数据,帮助工程师解决传统二极管方案的压降与漏电问题。

h0i1j2k3l的博客 1451

【笔记篇】Davinci Configurator OS模块(上)

主要讲解了AUTOSAR OS配置项和Vector MICROSAR OS的特性

weixin_47571898的博客 2274

vue 公共方法 如何引用 vuex

经过测试vuex是用于管理vuex state为主的设计,对于项目的公共方法需要使用外部js操作. 但涉及到一个问题就是静态变量的统一性,因此定义在vuex,外部js引用如下 commonMethods.js: import store from '@/store' export function func1() { const state1 = store.state.module...

Sun的专栏 2896

2026年中科曙光嵌入式笔试试卷带答案

2026年中科曙光嵌入式笔试试卷涵盖数字电路、总线协议、时序分析、存储原理及硬件寄存器操作等核心知识点。单选题聚焦SPI/I2C差异、建立/保持时间、ADC作用等基础概念;多选题考察时序约束、非易失存储、BMC功能等综合应用;判断题强化对关键术语的理解;填空题考查基本术语记忆;简答题要求掌握SPI与I2C对比、时序违例后果及BMC管理机制。试题紧扣嵌入式系统开发实际,突出接口协议、时序设计与硬件交互能力,是嵌入式岗位选拔的重要依据。

Open 24

vue怎么进行模块化开发

在上面的示例中,我们先引入了Vue.js与两个组件ComponentA和ComponentB。这就是使用Vue.js进行模块化开发的基本步骤。创建Vue实例:在JavaScript中,使用Vue构造函数创建一个Vue实例进行模块化开发。创建组件:使用Vue.component注册组件,创建组件模板、组件方法等。注册组件:使用Vue.component注册第五步中导入的组件。最后,我们创建了一个Vue实例,并将组件使用在模板中。导入组件:在另一个组件中导入我们创建的组件。模板中使用组件:在模板中使用组件。

m0_73481765的博客 646

matlab 点云学习目录【2026最新版】

matlab 点云学习目录。博客长期更新,本文最近更新时间为:2026年6月15日。

点云侠的博客 3万+

最近腾讯手机管家a.gray.Bulimia.a病毒提示决解方案

仅供参考(个人问题已解决 未申诉) 用户反馈app提示病毒图如下 然后下载生产包去https://www.virustotal.com/gui/这个网站去检测 果真提示病毒 重新加版本 打了个包 未加固 检测没问有问题 同一个包用360加固之后再检测有问题 ,但是没有a.gray.Bulimia.a报病毒 然后再用应用宝加固检测也没问题,个人以前都是用360加固的,很尴尬啊 最重要的一点的是,更新一个版本号,其余的啥都没改,更新替换手机的原来版本app,腾讯手机.

村头那抠脚大叔的专栏 3万+

Vue模块化开发

1、npm install webpack -g 全局安装 webpack2、npm install -g @vue/cli-init 全局安装 vue 脚手架3、初始化 vue 项目; vue init webpack appname:vue 脚手架使用 webpack 模板初始化一个 appname 项目4、启动 vue 项目; 项目的 package.json 中有 scripts,代表我们能运行的命令 npm start = npm run dev:启动项目 npm run build:将项目打包

wuyuecai的博客 2481

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1118

Web前端 ---- 【Vue】Vuex的使用(辅助函数、模块化开发)

vuex一文详解

weixin_68854196的博客 3319

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

vuex模块化

为了应对往后的大型项目vuex如果只是停留在存简单的数据那肯定是不行的,很久没做项目了既然不能再项目上找到突破点,那么只能将知识深入学习一波。 先来看看vuex针对模块的搭建的目录结构吧 文件夹放的全是vuex相关的文件store是主要暴露vuex实例的文件最终被引用到main.js import store from './vuex_study_module/store' new ...

qq_40816649的博客 8714

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

vuex模块化使用

1、Mutations是同步的,这意味着在mutation中的函数执行时,不能包含任何异步操作,如Promise或者setTimeout等。actions适用于复杂的状态变更,特别是那些涉及到异步操作的情况,如数据获取,提交表单。2、Mutations可以直接修改state,但必须通过提交mutation的方式来进行,通常在组件中通过this.在组件中使用 Vuex: 在需要访问或修改状态的组件中,你可以使用Vuex提供的辅助函数。,它们的主要职责是执行异步操作,然后通过提交。payload)来触发。

weixin_43045869的博客 1176

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Vue组件:Vuex的使用及简化使用,模块化命名空间

vue组件:vuex

HakerDONG的博客 1276

Vue学习笔记集--Vuex

在 Vuex store 中定义 state,state 是一个对象,用于存储应用的状态数据。state: {count: 0,todos: [})在 Vuex store 中定义 Mutations。Mutations 是一个对象,其中的每个属性是一个函数,这些函数接收 state 作为第一个参数,或者通过参数解构来获取 state 和其他上下文信息。state: {count: 0,todos: []},// 简单的 mutation},// 带参数的 mutation},

Three_stones的博客 1210

Vue学习笔记06 Vuex-模块化编程

文章目录Vue学习笔记06 Vuex理解vuex如何使用?执行的流程Devtools Vue学习笔记06 Vuex 理解vuex 是什么? 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中的管理,适合任意组件间通信。 插件import 'vuex' 什么时候使用vuex 1.多个组件依赖于同一状态 2.来自不同组件的行为需要变更同一状态 如何使用? 1.npm i vuex@3 vue2对应vuex3版本 vue3对应vuex4版本 2.Vue.use(Vu

好好学习天天向上 1642

Vuex模块化使用

一、概览 1、Vuex是什么 专为Vue.js应用程序开发的状态管理模式(状态即数据,即数据管理) 采用集中式存储管理应用的所有组件的状态 以相应的规则保证状态以一种可预测的方式发生变化 2、状态 组件内部状态:仅在一个组件内使用的状态( 即data字段里的数据,不能共享,只在本组件使用 ) 应用级别状态:多个组件共用的状态(将这个状态放入vuex中进行管理) 3、什么情况下使用Vuex 多个视图(组件)依赖同一状态 来自不同视图(组件)的行为需要变更同一状态 二、Vuex核心概念 1、store:类似容器

陆仁丶的博客 2758

vuex框架使用(框架,模块化)

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它允许您在应用程序中的组件之间共享和管理状态。即vuex是管理器框架内部图:state:用于存储共享数据(就是所有组件都需要访问的数据,为了方便起见存到state中,这也是vuex的主要功能)mutation:用于数据state的基础操作(如果学过springmvc,相当于持久化层)actions:用于业务流程操作(相当于业务层)

m0_49936845的博客 1422

vue插件开发:vuex模块化懒加载插件

vue插件开发:vuex模块化懒加载插件 vue 插件 插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制,一般有下面几种: 添加全局方法或者 property。如:vue-custom-element 添加全局资源:指令/过滤器/过渡等。如 vue-touch 通过全局混入来添加一些组件选项。如 vue-router 添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。 一个库,提供自己的 API,同时提供上面提到的一个或多个功能。如 vue-

廊坊吴彦祖 619

vuex使用详解,vuex模块化使用

vuex主要用于全局状态共享,就是不同组件可以使用一个数据对数据进行增删改,组件进行对应更改。主要有五个属性:state,getters,mutations,actions,modules。

前端开发努力中! 900

Vue.js Vuex 模块化管理

通过将 Vuex store 模块化,我们可以更好地组织和管理应用的状态,使代码更清晰、易于维护。无论是静态注册还是动态注册,模块化都为我们的应用带来了更高的灵活性和可扩展性。默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的。动态注册模块的一个常见场景是根据用户权限加载不同的模块,或者在插件中注册模块。接下来,我们需要在 Vuex 的 store 中注册这些模块。现在,我们可以在 Vue 组件中访问和操作模块的状态。的模块,用于管理购物车的状态。

轻口味的专栏 1078

Vue2篇——第七章 Vuex 从基础到模块化全解析

本文详细介绍了Vuex状态管理的核心内容和使用方法。主要内容包括: 项目初始化与ESLint配置 使用Vue CLI创建项目 配置ESLint代码规范检查工具 自动修复代码格式的方法 Vuex基础概念 State:集中存储应用状态 Mutations:同步修改状态的唯一途径 Actions:处理异步操作 Getters:派生状态的计算属性 模块化开发 使用namespaced组织模块 模块间状态访问方式 模块中的mutations和actions调用 使用技巧 辅助函数(mapState/mapGetter

2403_88453964的博客 1127

Vue3路由守卫、vuex的使用、vuex模块化拆分、vite中自动导入模块文件

vue3 中的导航守卫与 vue2 中的基本一致,不同的地方在于,vue3 中导航守卫取消了 next 参数,而是通过返回 false 来取消路由跳转。对 store 的入口文件中模块的导出作修改(对 useStore 做二次封装后导出)、对登录页面模块的导入作修改。在方式二的基础上,将 store/index.js 文件中的方法,拆分开导入。// vuex提供hook函数。// vuex提供hook函数。

月光晒了很凉快的博客 2352
上一篇: Vue 问题笔记 vue-router单页面应用跳转路由时触发事件
下一篇: 个人博客搭建笔记----hexo初始化目录结构和打包文件
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值