模块化+命名空间

news2024/11/27 5:37:38

1.目的:为了让代码更好维护,让多种数据分类更加明确

2.修改src/store/index.js为了解决不同模块命名冲突的问题,将不同模块的namespaced:true,之后在不同页面中引入getter actions mutations state,需要加上所属的模块名

const countAbout={
    namespaced:true,//开启命名空间
    actions:{},
    mutations:{},
    state:{},
    getters:{},
}
const personAbout={
    namespaced:true,//开启命名空间
    actions:{},
    mutations:{},
    state:{},
    getters:{},
}

// 暴露/导出store
export default new Vuex.Store({
    modules:[
        countAbout,
        personAbout
    ]
})

3.开启命名空间后,组件中读取state数据

//方式一:自己直接读取
this.$store.personAbout.list
//方式二:借助mapState读取
...mapState('countAbout',['sum','school','subject']

4.开启命名空间后,组件中读取getters数据

//方式一:自己直接读取
this.$store.getters['personAbout/firstPersonName']
//方式二:借助mapGetters读取
...mapGetters('countAbout',['bigSum'])

5.开启命名空间后,组件中调用dispatch

//方式一:自己直接dispatch
this.$store.dispatch('personAbout/addPersonWang',person)
//方式二:借助mapActions
...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})

6.开启命名空间后,组件中调用commit

//方式一:自己直接commit
this.$store.commit('personAbout/ADD_PERSON',person)
//方式二:借助mapMutations
...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'})

src/store/index.js

//引入vuex
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import countOptions from './count'
import personOptions from './person'

// 暴露/导出store
export default new Vuex.Store({
    modules: {
        countAbout:countOptions,
        personAbout:personOptions
    }
})

src/store/count.js

export default {
    namespaced: true,//开启命名空间
    actions: {
        // context相当于精简版的$store
        jiaOdd(context, value) {
            console.log('actions中的jiaOdd被调用了');
            if (context.state.sum % 2) {
                context.commit('JIA', value)
            }
        },
        jiaWait(context, value) {
            console.log('actions中的jiaWait被调用了');
            setTimeout(() => {
                context.commit('JIA', value)
            }, 500)
        }
    },
    mutations: {
        JIA(state, value) {
            console.log('mutations中的JIA被调用了');
            state.sum += value
        },
        JIAN(state, value) {
            console.log('mutations中的JIAN被调用了');
            state.sum -= value
        }
    },
    state: {
        sum: 0,   //当前的和
        school: '黑马',
        subject: '前端',
    },
    getters: {
        bigSum(state) {
            return state.sum * 10
        }
    },
}

src/store/person.js

import axios from 'axios'
import { nanoid } from 'nanoid'
export default {
    namespaced: true,//开启命名空间
    actions: {
        addPersonWang(context, value) {
            if (value.name.indexOf('王') === 0) {
                context.commit('ADD_PERSON', value)
            } else {
                alert('添加的人必须姓王!')
            }
        },
        addPersonServer(context) {
            axios.get('http://api.uixsj.cn/hitokoto/get?type=social').then(
                response => {
                    context.commit('ADD_PERSON', { id: nanoid(), name: response.data })
                },
                error => {
                    alert(error.message)
                }
            )
        }
    },
    mutations: {
        ADD_PERSON(state, value) {
            console.log('mutations中的ADD_PERSON被调用了');
            state.personList.unshift(value)
        }
    },
    state: {
        personList: [{
            id:'001',
            name:'张三'
        }]
    },
    getters: {
        firstPersonName(state) {
            return state.personList[0].name
        }
    },
}

src/components/Count.vue

<template>
  <div>
    <h1>当前求和为:{{ sum }}</h1>
    <h4 style="color:red">Person组件总人数为:{{ personList.length }}</h4>
    <h1>当前求和放大10倍为:{{ bigSum }}</h1>
    <h1>我在{{ school }},学习{{ subject }}</h1>
    <select v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="increment(n)">+</button>
    <button @click="decrement(n)">-</button>
    <button @click="incrementOdd(n)">当前求和为奇数再加</button>
    <button @click="incrementWait(n)">等一等再加</button>
  </div>
</template>

<script>
import {mapState,mapGetters,mapActions,mapMutations} from 'vuex'
export default {
  name: 'Count',
  data() {
    return {
      n: 1     //用户选择的数字
    }
  },
  computed:{
    ...mapState('countAbout',['sum','school','subject']),
    ...mapState('personAbout',['personList']),
    ...mapGetters('countAbout',['bigSum'])
  },
  methods: {
    ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),
    ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
  }
}
</script>

<style>
button {
  margin-left: 5px;
}
</style>

src/components/Person.vue

<template>
  <div>
    <h1>人员列表</h1>
    <h4 style="color: red;">Count组件求和为:{{ sum }}</h4>
    <h4>列表中第一个人的名字是:{{firstPersonName}}</h4>
    <input type="text" placeholder="请输入名字" v-model="name">
    <button @click="add">添加</button>
    <button @click="addWang">添加一个姓王的人</button>
    <button @click="addPerson">随机添加一个人</button>
    <ul>
      <li v-for="p in personList" :key="p.id">{{ p.name }}</li>
    </ul>
  </div>
</template>

<script>
import { nanoid } from 'nanoid'
export default {
  name: 'Person',
  data() {
    return {
      name: ''
    }
  },
  computed: {
    personList() {
      return this.$store.state.personAbout.personList
    },
    sum() {
      return this.$store.state.countAbout.sum
    },
    firstPersonName(){
      return this.$store.getters['personAbout/firstPersonName']
    }
  },
  methods: {
    add() {
      if (this.name === '') return
      const personObj = { id: nanoid(), name: this.name }
      // console.log(personObj)
      this.$store.commit('personAbout/ADD_PERSON', personObj)
      this.name = ''
    },
    addWang(){
      if (this.name === '') return
      const personObj = { id: nanoid(), name: this.name }
      // console.log(personObj)
      this.$store.dispatch('personAbout/addPersonWang', personObj)
      this.name = ''
    },
    addPerson(){
      this.$store.dispatch('personAbout/addPersonServer')
    }
  }
}
</script>

src/App.vue

<template>
    <div>
        <Count/>
        <hr>
        <Person/>
    </div>
</template>

<script>
import Count from './components/Count'
import Person from './components/Person'
export default {
    name: 'App',
    components: { Count,Person },

}
</script>

src/main.js

import Vue from 'vue'
import App from './App.vue'
//引入插件
import vueResource from 'vue-resource'

import store from './store'
Vue.config.productionTip = false
//使用插件
Vue.use(vueResource)

//创建vm
new Vue({
    el: '#app',
    render: h => h(App),
    store,
    beforeCreate(){
        Vue.prototype.$bus=this //安装全局事件总线
    }
})

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

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

相关文章

ADC基础进阶

ADC 啊.... 拿华大的来举例吧... 最少要知道了两个电路。 1. VERF 华大HC32F60的ADC以VREF为内部基准电压&#xff0c;如果VREFH管教悬空&#xff0c;那么实际其基准电压应该是MCU_3.3V&#xff0c;如果VREFH额外搭电路提供电压&#xff0c;应该是以其实际提供的电压为准&am…

Uber是如何解决数据一致性问题的呢?

Uber的请求流程非常复杂&#xff0c;如上图所示&#xff0c;他们使用Spanner来存储大量数据。Spanner是一个全面托管的、关键的关系型数据库服务&#xff0c;可以在全球范围内提供事务一致性和高可用性的自动同步复制。 但是&#xff0c;当扩展到数百万并发请求时&#xff0c;使…

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一 1 题目 Citi Bike是纽约市在2013年启动的一项自行车共享出行计划&#xff0c;由“花旗银行”(Citi Bank)赞助并取名为“花旗单车”(Citi Bike)。在曼哈顿&#xff0c;布鲁克…

PID算法:标准PID算法的一些改进措施

前面的几篇文章分别分享了PID算法的原理、增量式和位置式PID算法的区别、以及过程控制中一些重要的指标&#xff0c;感兴趣的朋友可以回看之前的文章或者自行查阅资料。 在实际项目中&#xff0c;使用数字PID算法对系统的被控量进行控制的时候&#xff0c;有时候并不是仅仅的使…

面试之可重复读是否可以解决幻读

可重复读&#xff08;repeatable read&#xff09;定义:一个事务执行过程中看到的数据&#xff0c;总是跟这个事务在启动时看到的数据时是一致的。 不过理论上 是会出现幻读的&#xff0c;简单的来说幻读指的是当用户读取某一范围的数据行时&#xff0c;另外一个事务又在该范围…

一个PDF怎么拆分成几个?这几个方法轻松拆分PDF!

在现代生活与工作的环境中&#xff0c;我们常常需要以高效的方式处理包含大量信息的PDF文件。在这种情况下&#xff0c;拆分这些文件成为一种理想的解决方案&#xff0c;以便更精准地管理和阅读这些信息。接下来&#xff0c;我们将深入探讨几种实用的PDF拆分技巧。 一、直观的…

postman-循环调用测试接口

此篇文章产生的背景是想针对接口做流控验证&#xff0c;检查流控是否奏效&#xff0c;便发现postman也能一次操作来循环调用接口&#xff0c;减少了一些开发测试工作&#xff0c;下面就看一下操作流程 目录 前置查看postman版本我的接口数据 具体操作步骤新建接口集选择接口集进…

FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载

水果音乐编辑软件FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载是兔八哥爱分享搜集到的Mac Os系统上一款功能齐全的音乐编曲工具&#xff0c;可以为需要创作高品质音乐曲目的专业和业余艺术家提供多轨录音&#xff0c;排序和混音。 借助FL Studio 21的帮助…

运动模糊还原|维纳滤波|图像处理

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 这两个都是博主在学习Linux操作系统过程中的记录&#xff0c;希望对大家的学习有帮助&#xff01; 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

《Ansible故障篇:ansible报错解决python依赖》

一、背景信息 如下报错&#xff1a;这个警告是提醒您当前的Ansible配置在目标主机上使用的是/usr/bin/python而不是建议的/usr/bin/python3&#xff0c;因为Ansible 2.9版本之前的某些版本默认使用早期的Python 2.x版本。然而&#xff0c;在将来的版本中&#xff0c;Ansible将会…

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接&#xff08;若失效评论区留言发送最新链接&#xff09;&#xff08;2023.7亲测可用&#xff09; 2.安装插件 &#xff08;1&#xff09;打开chrome浏览器页面&#xff0c;点击&#xff1a;右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

leedcode 1326. 灌溉花园的最少水龙头数目

在 x 轴上有一个一维的花园。花园长度为 n&#xff0c;从点 0 开始&#xff0c;到点 n 结束。 花园里总共有 n 1 个水龙头&#xff0c;分别位于 [0, 1, …, n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges &#xff0c;其中 ranges[i] &#xff08;下标从 0 开始…

wsl2中安装docker

1、安装docker 执行以下脚本&#xff1a; 这个脚本在执行之前需要先执行chmod x install-docker.sh这个命令 # install docker curl -fsSL get.docker.com -o get-docker.sh sh get-docker.shif [ ! $(getent group docker) ]; thensudo groupadd docker; elseecho "doc…

暗图增强 小期刊/会议 论文阅读笔记

Y. Ueda, H. Misawa, T. Koga, N. Suetake and E. Uchino, “HUE-Preserving Color Contrast Enhancement Method Without Gamut Problem by Using Histogram Specification,” 2018 25th IEEE International Conference on Image Processing (ICIP), Athens, Greece, 2018, pp…

一种具有集成JFET区域的新型SiC沟道MOSFET,通过该区域改善了其短路容限能力

标题&#xff1a;A Novel SiC Trench MOSFET with Improved Short-circuit Capability through an Integrated JFET Region 阅读日期&#xff1a;2023.7.16 研究了什么 该文章研究了一种新型SiC沟槽栅MOSFET&#xff0c;其具有集成JFET区域&#xff08;IJ-TMOS&#xff09;&a…

天天刷题-->LeetCode(最长回文子串)

个人名片&#xff1a; &#x1f405;作者简介&#xff1a;一名大二在校生&#xff0c;热爱生活&#xff0c;爱好敲码&#xff01; \ &#x1f485;个人主页 &#x1f947;&#xff1a;holy-wangle ➡系列内容&#xff1a; &#x1f5bc;️ tkinter前端窗口界面创建与优化 &…

【NLP】使用Word Embedding实现中文自动摘要

使用Word Embedding实现中文自动摘要 主要步骤中文语料库数据预处理生成词向量把文档的词转换为词向量生成各主题的关键词检查运行结果 参考资料 本文通过一个实例介绍如何使用Word Embedding实现中文自动摘要&#xff0c;使用 Gensim中的word2vec模型来生成Word Embedding。 …

揭秘乳腺癌预测黑科技:R语言和支持向量机的奇妙之旅!

一、引言 乳腺癌被认为是全球范围内最常见的癌症之一&#xff0c;对女性健康造成了重大威胁[1]。根据世界卫生组织的统计数据&#xff0c;乳腺癌是女性恶性肿瘤中的主要类型&#xff0c;并且是导致女性死亡的第二大原因[2]。这个事实凸显了乳腺癌在全球范围内的流行程度以及对公…

数据库架构演变过程

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

ES系列--分析器

一、前言 ES进行文档分析就会涉及到分析器&#xff0c;无论是内置的分析器&#xff0c;还是自定义的分析器&#xff0c;都是由一个分词器&#xff08;tokenizers&#xff09; 、0或多个词项过滤器&#xff08;token filters&#xff09;、0或多个字符过滤器&#xff08;charact…