Vuex模块化管理

这篇具有很好参考价值的文章主要介绍了Vuex模块化管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

第一步:安装Vuex 

安装方法一: 

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

安装方法二: 

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

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

Vuex模块化管理,Vue,vue.js,前端,javascript 

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

Vuex模块化管理,Vue,vue.js,前端,javascript

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

Vuex模块化管理,Vue,vue.js,前端,javascript

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

Vuex模块化管理,Vue,vue.js,前端,javascript

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

Vuex模块化管理,Vue,vue.js,前端,javascript

(只要把模块挂载到根目录下,默认是挂载到全局的,除非你开启了命名空间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
}

 文章来源地址https://www.toymoban.com/news/detail-606963.html

到了这里,关于Vuex模块化管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端】Vue2 脚手架模块化开发 -快速入门

    🎄欢迎来到@边境矢梦°的csdn博文🎄  🎄本文主要梳理Vue2 脚手架模块化开发 🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下 🫰🫰🫰 ,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕

    2024年02月10日
    浏览(82)
  • 【前端模块化】JS模块化思想以及相关规范(CommonJS、ES module)

    1.模块化概念 随着前端应用日趋复杂,项目代码也大量膨胀,模块化就是一种最主流的代码组织方式, 一个模块就是一个实现特定功能的文件 ,它通过把我们的复杂代码按照功能的不同,划分为不同的模块单独维护的这种方式,去提高我们的开发效率,降低维护成本。要用

    2024年02月01日
    浏览(63)
  • 前端node.js入门-前端工程化与模块化

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 Node.js 入门  什么是 Node.js? 什么是前端工程化?   Node.js 为何能执行 JS?  fs 模块 - 读写文件  path 模块 - 路径处理 URL 中的端口号  常见的服务程序  Node.js 模块化 什

    2024年02月14日
    浏览(86)
  • 04_前端包管理工具&模块化

    注意事项: ​ 改模块代码不用重启服务器,修改config文件的时候需要重启服务器 ​ nvm的安装路径和node的安装路径不能在同一路径下面 ​ 有乱码问题使用管理员权限进行使用use方法 下载安装node ​ 使用命令进行安装 1.nvm list 查看已下载所有的node版本 2.nvm install 版本号 下载指

    2024年02月12日
    浏览(47)
  • Vuex④(多组件共享数据、Vuex模块化+namespace)

    我们现在想实现这种情况: Person组件的总人数就是Person中列表的长度 br上的是Count组件,br下的是Person组件。 我们通过vuex中的state实现一些数据的多组件共享: Person.vue 注意点: 这里使用了id生成类nanoid,如果要使用先安装包 使用方法: Count.vue store 我们查看我们前面的代码

    2023年04月16日
    浏览(37)
  • 【前端JS交互篇】函数、参数、返回值、闭包函数、递归函数、内存、模块化编程

    函数可以封装一些功能,可以供外部去重复的调用。所以,一般我们把函数叫做具有重复功能的代码块。 JavaScript 基础到高级 Canvas游戏开发 原生JavaScipt案例合集 JavaScript +DOM基础 假设饭店就是一个函数,饭店的功能就是做各种各样的菜,但是具体做什么菜,需要用户来点,用

    2024年02月15日
    浏览(69)
  • Vue的模块化开发初探

    Vue是一个渐进式JavaScript框架,可以按需引入部分功能,而不必全量引入整个框架。 2.1 下载必须模块 在浏览器输入: https://unpkg.com/vue@3/dist/vue.esm-browser.js ,右键另存为,保存到demo.html文件同级目录下。 2.2 安装Live Server插件 在VSCode插件市场搜索Live Server并安装,如下图: 2.

    2024年04月10日
    浏览(60)
  • Vue待办事项(组件,模块化)

    //html页面代码 !DOCTYPE html html     head         meta charset=\\\"utf-8\\\"         title/title         style             * {                 padding: 0;                 margin: 0;             }             ul,             ol {                 list-style: none;     

    2024年01月21日
    浏览(54)
  • 如何在Vue中进行单元测试?什么是Vue的模块化开发?

    在Vue中进行单元测试可以提高代码的可维护性和可读性,同时也能够帮助开发者更快地找到代码中的问题和潜在的错误。下面是一些在Vue中进行单元测试的步骤: 安装单元测试工具 首先需要安装一个单元测试工具,例如Jest或Mocha。可以使用npm或yarn进行安装。 创建测试文件

    2024年02月12日
    浏览(42)
  • 前端框架前置课Node.js学习(1) fs,path,模块化,CommonJS标准,ECMAScript标准,包

    目录 什么是Node.js 定义 作用: 什么是前端工程化 Node.js为何能执行Js fs模块-读写文件 模块 语法: 1.加载fs模块对象 2.写入文件内容 3.读取文件内容 Path模块-路径处理 为什么要使用path模块 语法 URL中的端口号 http模块-创建Web服务 需求 步骤: 案例:浏览时钟 步骤: 什么是模块化 定

    2024年01月16日
    浏览(110)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包