Vuex模块化管理

news2024/12/24 8:29:52

如果你的项目是一个小型项目,就用不着使用模块化;

但是,如果你参与的项目是一个中大型项目,那Vuex模块化,必不可少,否则整个文件很臃肿,也很难管理。

通过模块化管理:各自模块下都有自己的state及方法,各自模块管理自己的数据,这样不容易造成混乱。

第一步:安装Vuex 

安装方法一: 

如果你使用的是vue create xxx 方法来创建项目时,那你在创建时就把vuex勾选上,会自动帮你下载安装

安装方法二: 

npm install vuex@next --save
or
yarn add vuex@next --save

但是第二步手动下载的时候,需要在main.js中导入并挂载

 

第二步: 在store文件夹中创建modules文件夹

第三步:在store/modules文件夹下创建你需要的模块js文件

 第四步:创建模块的内部结构

 第五步:将各个模块导入至根目录store/index.js文件中,并挂载

(只要把模块挂载到根目录下,默认是挂载到全局的,除非你开启了命名空间namespaced: true


第六步:开始使用

一、访问state数据

        

        ①我们直接调用根目录下index.js的state:

console.log(this.$store.state)

        ②使用映射的方法

import {  mapGetters, mapState, mapMutations, mapActions } from 'vuex';
...mapGetters(['rootGetters01']),

        ③:通过映射的方法访问某个模块下的数据

...mapState('user',['userInfo','numberArr'])
user:是模块名、userInfo和numberArr都是user模块下的state属性( 能访问某个模块里的属性前提是他们各自开启了命名空间

二、触发mutations 

        方法①:

        页面内容

<el-button type="primary" size="small" @click="updateName">更新名称</el-button>
updateName(){//更新姓名(user模块)
            //$store.commit('模块名/mutation名',额外参数)
            this.$store.commit('user/setName','回流生')
        },

        user模块内容

const state = {
    userInfo:{
        name:'文龙刚',
        job:'前端开发工程师',
        age:'18'
    },
}

const mutations={
    setName(state,Newname){//更新名字
        state.userInfo.name = Newname
    },
}

        方法②:触发模块下映射的方法

...mapMutations('user',['addUserArr']),
...mapMutations('模块名',['方法名']),

        方法③:直接使用标签并传参

<el-button type="primary" size="small" @click="setUserSecond('56')">使用模块映射方法并传参</el-button>

还有触发actions方法,跟上面的mutations 用法一致,不过actions触发方法是

this.$store.dispatch('模块名/模块中的方法','参数')

以下是具体代码,可运行查看相应效果

//  store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
//导入模块
import user from './modules/user'
import setting from './modules/setting'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    name:'我是根目录下index的state值',
    rootArray:['1','2','3','4','5','6'],//根目录下rootArray值
  },
  getters: {
    rootGetters01(state){
      return state.rootArray
    }
  },
  mutations: {
  },
  actions: {
  },
  modules: {//挂载模块
    user,
    setting
  }
})
//    store/modules/user.js

//用户模块
const state = {
    userInfo:{
        name:'文龙刚',
        job:'前端开发工程师',
        age:'18'
    },
    list:[
        {goods:'苹果',system:'IOS',price:'8590'},
        {goods:'华为',system:'鸿蒙',price:'7500'},
        {goods:'vivo',system:'安卓',price:'4500'},
    ],
    english:'abcd',
    numberArr:['1','2','3','4','5','6','7','8']
}

const mutations={
    setName(state,Newname){//更新名字
        state.userInfo.name = Newname
    },
    addUserArr(state,addArr){//给 numberArr 增加数据
        return state.numberArr.push(addArr)
    }
}
const actions ={//不能直接更改state的数据,必须通过mutations
    setUserSecond(context,addNewArr){
        //将异步在action中进行封装
        setTimeout(()=>{
            //调用mutation context上下文,默认提交的就是自己模块下的
            context.commit('addUserArr',addNewArr)//调用本模块下的 addUserArr 方法
            // context.commit('setting/addUserArr',addNewArr)//调用setting模块下的方法
        },1000)
    }
}

const getters ={
    //分模块后,state指子模块的state
    UpperCaseName(state){//第一个参数永远是state,
        return state.english.toUpperCase()
    },
    list(state){
        let money=0
        state.list.map((item)=>{
            money+=parseInt(item.price)
        })
        return money
    }
}

export default {
    namespaced: true,//开启命名空间,用来映射子模块
    state,
    mutations,//如果开启了命名空间,就直接挂载到子模块上了,默认是挂载到全局的
    actions,
    getters
}
//store/modules/setting.js


//设置模块
const state = {
    theme:'我是setting模块下的 theme 值',
    sex:'男',
    school:'西安电子科技大学',
    date:'2023年7月25日',

}

const mutations={
    setSex(state,newSex){//更新性别
        state.sex = newSex
    }
}
const actions ={}
const getters ={}

export default {
    namespaced: true,//开启命名空间,用来映射子模块
    state,
    mutations,
    actions,
    getters
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux环境搭建篇】--- 还不会搭建Linux环境?收藏这一篇就够了

文章目录 前言&#x1f31f;一、Linux背景介绍&#x1f30f;1.1. 发展史&#x1f30f;1.2. 开源 &#x1f31f;二、搭建Linux环境&#x1f31f;三、使用 XShell 远程登陆到 Linux&#x1f31f;四、XShell 下的复制粘贴&#x1f63d;总结 前言 &#x1f467;个人主页&#xff1a…

AF647 Azide,Alexa Fluor 647 Azide,明亮且光稳定的荧光基团

文章编辑来自于&#xff1a;陕西新研博美生物科技有限公司MISS.wu​ Alexa Fluor 647 Azide&#xff0c;Alexa Fluor 647 N3&#xff0c;AF647 Azide&#xff0c;AF 647 N3| AF 647 叠氮&#xff0c;Alexa Fluor 647叠氮 | CAS&#xff1a;N/A | 纯度&#xff1a;95% PA…

vue项目加按钮,两个不同的项目当前页进行互相切换

服务器上两个项目当前页互相切换 直接使用 window.location.href 调整的页面地址 这里一定要注意服务器上项目的前缀名称即可。

【iOS】—— RunLoop和多线程相关问题总结

RunLoop 1. 讲讲RunLoop&#xff0c;项目中有用到过吗&#xff1f; RunLoop 的基本作用&#xff1a;保持程序的持续运行&#xff0c;节省 CPU 的资源&#xff0c;提高程序的性能 &#xff08; 没有事情&#xff0c;就请休眠&#xff0c;不要功耗。有事情&#xff0c;就处理&a…

如何制定数据采集解决方案?

数据采集仍是人工智能&#xff08;AI&#xff09;构建团队的主要瓶颈。原因各不相同&#xff1a;用例数据可能不足&#xff0c;深度学习等新机器学习&#xff08;ML&#xff09;技术需要更多数据&#xff0c;或者团队并未建立获取所需数据的适当流程。但无论如何&#xff0c;对…

xmind latex【记录备忘】

xmind latex 换行 换行必须要有\begin{align}和\end{align}&#xff0c;此时再在里面用\才能换行&#xff0c;如果只写112\224是不能换行的

2023第五届全国生物资源提取与应用创新论坛即将举办

01、会议背景 为进一步加强生物资源提取行业交流与合作&#xff0c;促进业“产学研用”融合&#xff0c;提升行业科技创新水平&#xff0c;增强行业国际竞争力&#xff0c;中国生物发酵产业协会、浙江科技学院、浙江工业职业技术学院、浙江省农业生物资源生化制造协同创新中心&…

JS算法之递归

含义 递归函数是指能够直接或间接调用自身的方法或函数。 // 直接 function do() {do(); }// 间接 function do() {do2(); } function do2() {do() } 每个递归函数必须有基线条件&#xff08;即停止点&#xff0c;一个不再递归调用的条件。&#xff09;否则将无限递归下去。 因…

每天一个电商API分享:淘宝/天猫获取商品销量详情 API(月销总销)

淘宝/天猫获取商品销量详情API&#xff08;月销总销&#xff09;是一种用于获取电商平台上商品销量数据的接口。通过这个API&#xff0c;用户可以方便地获取到商品的月销量以及总销量等详细信息&#xff0c;快速了解商品的销售情况。 随着电商行业的快速发展&#xff0c;不少卖…

pytest study

pytest 测试用例的识别与运行 测试文件&#xff1a;test_*.py 和 *_test.py 以test开头或结尾的文件 测试用例&#xff1a;Test*类包含的所有 test_*的方法&#xff08;测试类不能带有__init__方法&#xff09;&#xff0c; 不在class中的所有test_*的方法 def func(x):r…

RunnerGo性能测试怎么做?

性能测试—计划管理 新建计划&#xff1a; 在左侧导航栏中&#xff0c;选择“性能测试”&#xff0c;点击“计划管理”进入计划管理界面&#xff0c;点击右上角新建计划来新建测试计划。任务类型选择后不可再更改。定时模式下, 该计划内最多只能创建一个场景。 普通任务&…

如何往MySQL中插入100万条数据?

需求 现在有一个 数据量 为100万的数据样本 100w_data.sql 其数据格式如下&#xff0c;截取最后十条数据 999991,XxGdnLZObA999991,XxGdnLZObA,XxGdnLZObA,2020-3-18,1 999992,TBBchSKobC999992,TBBchSKobC,TBBchSKobC,2020-9-8,2 999993,rfwgLkYhUz999993,rfwgLkYhUz,rfwgLk…

APISIX 安全评估

背景 有大佬已经对 [apisix攻击面](https://ricterz.me/posts/2021-07-05-apache-apisix-attack- surface-research.txt)做过总结。 本文记录一下自己之前的评估过程。 分析过程 评估哪些模块&#xff1f; 首先我需要知道要评估啥&#xff0c;就像搞渗透时&#xff0c;我得…

【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现

【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现前言NeRS模型运行下载源码并安装环境安装…

体制内裸辞,她用云端地球实现了自己的乡村梦

追逐田园的“诗与远方” “我最初的梦想&#xff0c;就是有一个亲手打造的、能装进个人喜好的小院子。”为完成自己的梦想&#xff0c;吕春萍毅然放弃了体制内的工作&#xff0c;来到秦岭脚下的桥南镇曹峪村&#xff0c;践行自己的“乡村梦”。 起初&#xff0c;吕春萍做了五…

「开源项目」开源企业级问答系统-Danswer

danswer 基本介绍 开源企业级问答系统&#xff0c;可以对内部文档进行自然语言提问&#xff0c;并返回可靠的答案、引用和参考资料&#xff0c;可以连接到多种常见工具&#xff0c;如Slack、GitHub和Confluence。 在线预览 暂无在线预览地址&#xff0c;不过可以自行部署使用…

【error】svn 清理以下路径失败 原始内容不存在

前言 目前我们这边的内网代码是通过 TortoiseSVN 进行版本管理的&#xff0c;平时用着也挺好的&#xff0c;没碰到什么大问题。 但是&#xff0c;今天碰到了一个比较棘手的问题&#xff0c;在这里做一下记录&#xff0c;以方便自己和有需要的朋友在之后碰到该类问题时有个参考…

[php-cos]ThinkPHP项目集成腾讯云储存对象COS

Cos技术文档 1、安装phpSdk 通过composer的方式安装。 1.1 在composer.json中添加 qcloud/cos-sdk-v5: >2.0 "require": {"php": ">7.2.5","topthink/framework": "^6.1.0","topthink/think-orm": "…

为什么中小企业数字化转型这么难?_光点科技

随着科技的飞速发展和数字化时代的到来&#xff0c;数字化转型已成为现代企业发展的必然趋势。大型企业普遍拥有雄厚的资源和资金&#xff0c;能够较为顺利地进行数字化转型。然而&#xff0c;对于中小企业来说&#xff0c;数字化转型却面临着诸多挑战和困难。 资金限制&#x…

5个步骤完成Linux 搭建Jdk1.8环境

1&#xff1a;首先&#xff0c;在Linux系统中创建一个目录&#xff0c;用于存放JDK文件。可以选择在/opt目录下创建一个新的文件夹&#xff0c;例如/opt/jdk。 sudo mkdir /opt/jdk 2&#xff1a;将下载的jdk-8u381-linux-x64.tar.gz文件复制到新创建的目录中。 sudo cp jdk…