Vue2.x中的Vuex

news2024/11/17 7:28:20

目录

一、vuex是什么

1.1、概念

1.2、Github地址

1.3、使用场景

1.4、同胞传值

1.5、Vuex工作原理

1.6、搭建Vuex环境

二、求和案例

2.1、getters用法

2.2、mapState与mapGetters

2.3、mapActions与mapMutations

2.4、Vuex模块化+命名空间namespace

2.5、头插人员案例

一、vuex是什么

1.1、概念

   专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

1.2、Github地址

如下: https://github.com/vuejs/vuex

1.3、使用场景

  1. 多个组件依赖于同一状态
  2. 来自不同组件的行为需要变更同一状态

1.4、同胞传值

多组件共享数据----全局事件总线实现

代码实现

(1)在src包下的assets文件夹下创建js文件夹,并创建一个名为eventBus.js的文件,里面写入如下代码:

import Vue from 'vue'
export default new Vue();

(2)对于components文件夹下的兄弟组件:OneBar.vue(左)、TwoBar.vue(右)

1.5、Vuex工作原理

多组件共享数据-----vuex实现

【Vue components】相当于“客人”、【Actions】相当于“服务员”、【Mutations】相当于“后厨”、【State】相当于“菜”。

流程大概是客人---服务员---后厨---菜的关系。

1.6、搭建Vuex环境


注意:vue2中,要用vuex的3版本;vue3中,要用vuex的4版本

我们目前用的vue2,所以要安装npm i vuex@3,然后在main.js中引入

二、求和案例

纯vue版本代码:

<template>
  <div>
    <h1>当前求和为:{{ sum }}</h1>
    <h1>当前求和放大10倍为:{{ doubleShi }}</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">+</button>
    <button @click="deincrement">-</button>
    <button @click="incrementOdd">当前求和为奇数再加</button>
    <button @click="incrementWait">等一等再加</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      n: 1, //用户选择的数字
      sum: 0, //当前的和
    };
  },
  computed: {
    doubleShi() {
      return this.$store.state.sum * 10;
    },
  },
  methods: {
    increment() {
      this.sum += this.n;
    },
    deincrement() {
      this.sum -= this.n;
    },
    incrementOdd() {
      if (this.sum % 2) {
        this.sum += this.n;
      }
    },
    incrementWait() {
      setTimeout(() => {
        // 函数体
        this.sum += this.n;
      }, 500);
    },
  },
};
</script>

 vuex版本代码:

 备注:红色为:mutations直接用法、绿色为:state用法、蓝色为:actions触发mutations用法

2.1、getters用法

备注:Vuex中的state相当于datagetters相当于computed

computed其实是对data属性值的加工,在html中的用法和data一样

2.2、mapState与mapGetters

如果Vuex中的state里面有很多属性,一个个获取很麻烦,那么我们借助mapState批量获取

而Vuex中的getters获取时,则可以借助mapState进行获取

2.3、mapActions与mapMutations

mapMutations用法:对象写法函数名不用变、数组写法函数名和数组名保持一致!

 如果不想给button标签里的函数传参数的话,就如下所示:

 mapActions用法:对象写法函数名不用变、数组写法函数名和数组名保持一致!

 备注:

mapActions与mapMutations在使用时,若需要传递参数:需要在模板中绑定事件时传递参数,否则参数是事件对象。

总结:

这4个方法在使用时要先引入

 vuex中state中的值computed获取;mutations以及actions里的方法都用methods获取

所以这就使得mapState与mapGetters写在computed里面,mapActions与mapMutations写在methods里面

总的来说,同一页面的多个组件传值,不想多次使用正向传值,就可以使用Vuex,而Vuex为了方便使用,也会借助namespaced:true命名不同的js文件存储数据。

2.4、Vuex模块化+命名空间namespace

也可以分开写,然后在store的index.js单独引入 

2.5、头插人员案例

<template>
  <div>
    <h1>人员列表</h1>
    <input type="text" placeholder="输入名字" v-model="name" />
    <button @click="add">添加</button>
    <ul>
      <li v-for="p in pList" :key="p.id">{{ p.name }}</li>
    </ul>
  </div>
</template>
<script>
import { nanoid } from "nanoid";
export default {
  data() {
    return {
      name: "",
    };
  },
  computed: {
    pList() {
      return this.$store.state.personList;
    }
  },
  methods: {
    add() {
      const perObj = { id: nanoid(), name: this.name };
      this.$store.commit("Add_PERSON", perObj);
      this.name = "";
      // console.log(perObj);
    },
  },
};
</script>

 Vuex的store中

  state: {
    personList:[
          {id:'001',name:'张三'}
    ]
  },
  mutations: {
    Add_PERSON(state,val){
      console.log('mutations中的Add_PERSON被调用了',state,val);
      state.personList.unshift(val)
     },
  },

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

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

相关文章

Nacos 寻址机制

目录 1. 什么是寻址机制 2. 源码讲解 MemberLookup AbstractMemberLookup 2.1 单机寻址 2.2. 文件寻址 2.3 地址服务器寻址 1. 什么是寻址机制 假设存在一个 Nacos 集群&#xff0c;其内部具有 A , B , C 三个节点。 客户端如何决定向集群中的哪个节点发送请求 在 appl…

基于Springboot+Mybatis+mysql+element-vue高校就业管理系统

基于SpringbootMybatismysqlelement-vue高校就业管理系统一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息&#xff08;学生端&#xff09;4.我的应聘(学生端)5.学生信息管理&#xff08;辅导员&#xff09;6.三方协议书审核&#xff08;辅导员&am…

向用户展示推荐算法,TikTok主动“透明化”

获悉&#xff0c;近日TikTok宣布推出一项新功能&#xff0c;用户可以查看推荐主页&#xff08;For You&#xff09;中某个视频被推荐的原因&#xff0c;这一功能让用户拥有了更多的知情权&#xff0c;让TikTok的算法变得更透明化。新功能新功能推出后&#xff0c;用户可以在视频…

Diskless:云与互联网数据中心的下一个大变革

作为数字经济的核心产业&#xff0c;云与互联网数据中心正面临着下一波技术浪潮的冲击&#xff1a;云原生应用和Serverless无服务器计算的全面普及&#xff0c;推动数据中心底层硬件资源彻底解耦池化和重组整合&#xff0c;形成新的扁平分层——新型存算分离硬件架构&#xff0…

定时循环执行Python脚本 —— 定时执行专家

目录 提前准备 方案一、执行DOS命令 方式 1、在《定时执行专家》里新建“执行DOS命令”任务 方案二、执行脚本文件 方式 1、编写 .bat 脚本&#xff0c;用来执行Python脚本 2、在《定时执行专家》里新建“执行脚本文件”任务 本文提供两种使用《定时执行专家》定时循环执…

挑选在线客服系统的七大注意事项

在线客服系统是客户关怀软件&#xff0c;能够为访客和客服提供即时对话&#xff0c;对访客来说&#xff0c;能够为其提供一个快速、高效的沟通方式&#xff0c;即时性的互动提高访客沟通体验&#xff1b;对客服来说&#xff0c;有效提高客服效率,为客服人员节省大量宝贵时间。 …

机器学习 | 支持向量机

一.基本原理 SVM是一种二分类模型 基本思想&#xff1a;在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类&#xff0c;具体来讲&#xff0c;有三种情况&#xff08;不加核函数的话就是线性模型&#xff0c;加了之后才会升级为一个非线性模型&#xff09; 当训练…

玩以太坊链上项目的必备技能(Constant 和 Immutable 状态变量-Solidity之旅十六)

constant&#xff08;常量&#xff09; 说到常量这一概念&#xff0c;拥有现代编程经历的您&#xff0c;对这一词再熟悉不过了。 常量&#xff0c;常量&#xff0c;顾名思义便是变量值始终不变&#xff0c;这在很多面向对象程序语言中都有。 相对 Solidity 来说&#xff0c;…

Web入门开发【六】- 域名认证

欢迎来到霍大侠的小院&#xff0c;我们来学习Web入门开发的系列课程。 首先我们来了解下这个课程能学到什么&#xff1f; 1、你将可以掌握Web网站的开发全过程。 2、了解基础的HTML&#xff0c;CSS&#xff0c;JavaScript语言。 3、开发自己的第一个网站。 4、认识很多对编…

LabVIEW如何减少下一代测试系统中的硬件过时2

LabVIEW如何减少下一代测试系统中的硬件过时2 HAL最佳实践 从通用测试函数中分离测试逻辑 一个重要的最佳实践是将特定于dut的测试逻辑与更通用的、可重用的测试模块分离&#xff0c;以提高重用性并减少重新验证和文档成本。解耦和使层模块化可以改进系统架构&#xff0c;使…

08 面向对象三大特性

目录 一 封装 1.1 概述 1.2 为什么要进行封装&#xff1f; 1.3 Java中的封装 1.4 四种访问权限修饰符 1.5 练习 二 继承 2.1 继承的由来 2.2 继承的好处 2.3 语法格式 2.4 继承的特点之一&#xff1a;成员变量 2.4.1 父类成员变量私有化 2.4.2 父类和子类成员变量…

二维刚体变换

欢迎访问我的博客首页。 二维刚体变换1. 二维旋转矩阵2. 参考1. 二维旋转矩阵 二维世界坐标系中任一点 P(x,y)P(x, y)P(x,y) 绕原点逆时针旋转 θ\thetaθ 度到点 P′(x′,y′)P(x, y)P′(x′,y′)&#xff0c;这个旋转可以用一个二维矩阵表示 R逆[cosθ−sinθsinθcosθ].(1.…

女文科生转行做程序员,工资涨了4倍,戏说“我是女生”怕啥秃顶

前几天&#xff0c;有一个女生在后台留言&#xff0c;问她要不要毕业后做程序员工作&#xff1f;自己特别纠结。 情况是这样的&#xff1a;她今年大学毕业&#xff0c;学计算机专业&#xff0c;有一定兴趣&#xff0c;但父母比较反对&#xff0c;列举了很多程序员熬夜加班的痛…

Fragment案例

Fragment案例 1.案例要求 框架布局项目难点&#xff1a;1 导航栏的实现&#xff0c;显示导航按钮、切换Fragment 2 每个Fragment的创建、显示 3 Fragment的跳转&#xff08;从新闻列表到新闻详情&#xff0c;再返回&#xff09; 涉及的技术&#xff1a;用RadioGroup及RadioButt…

【学习笔记07】vue3移动端的适配

目录1、创建一个项目并启动2、设置根字体大小和单位转化3、去掉边框距离4、css的嵌套使用5、连接到手机上显示6、vant ui 库的使用6.1 基础用法6.2 底部导航栏7、模拟锤子商城7.1 请求数据7.2 解决跨越7.3 组件切换7.4 轮播图的实现1、创建一个项目并启动 npm init vuelatestcd…

【OpenCV-Python】教程:7-4 KMeans 应用

OpenCV Python KMeans 应用 【目标】 使用 cv2.kmeans 对数据进行聚类 【代码】 1. 单个特征的 KMeans # 单特征数据的聚类 import numpy as np import cv2 from matplotlib import pyplot as pltx np.random.randint(25,100,25) y np.random.randint(175,255,25)z np.h…

Linux系统下管理员账号root忘记密码怎么找回

忘记root密码一般有两种情况&#xff1a; 一种是登上了root账号&#xff0c;但是忘记密码了&#xff0c;这种情况比较简单&#xff0c;在终端即可实现修改密码&#xff1b; 一种是登录不上root账号&#xff0c;这种情况稍微麻烦些&#xff0c;需要开机时进行一系列操作。 不能登…

【源码共读】Css-In-Js 的实现 classNames 库

classNames是一个简单的且实用的JavaScript应用程序&#xff0c;可以有条件的将多个类名组合在一起。它是一个非常有用的工具&#xff0c;可以用来动态的添加或者删除类名。 仓库地址&#xff1a;classNames 使用 根据classNames的README&#xff0c;可以发现库的作者对这个…

Spring 事务失效的常见八大场景,注意避坑

1. 抛出检查异常导致事务不能正确回滚 Servicepublic class Service1 {Autowiredprivate AccountMapper accountMapper;Transactionalpublic void transfer(int from, int to, int amount) throws FileNotFoundException {int fromBalance accountMapper.findBalanceBy(from);…

【源码共读】学习 axios 源码整体架构 (II)

源码分析 跳转至Axios.js文件中 // 构造函数 constructor(instanceConfig) {this.defaults instanceConfig// 创建对应的拦截器this.interceptors {request: new InterceptorManager(),response: new InterceptorManager()} } 那么&#xff0c;拦截器是怎么创建的呢 首先&a…