Vue3 Vuex状态管理多组件传递数据简单应用

news2024/9/22 13:22:56

去官网学习→安装 | Vuex

cd 项目 安装 Vuex: npm install --save vuex

或着 创建项目时勾选Vuex         vue create vue-demo

? Please pick a preset: Manually select features
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert
selection, and <enter> to proceed)
 (*) Babel
 ( ) TypeScript
 (*) Progressive Web App (PWA) Support
 (*) Router
>(*) Vuex
 ( ) CSS Pre-processors
 ( ) Linter / Formatter
 ( ) Unit Testing
 ( ) E2E Testing

运行示例:

 

 Vuex代码:store/index.js

// 引用 Vuex
import { createStore } from 'vuex'
// 引用 axios 网络请求 安装 cnpm install --save axios
import axios from 'axios';

//导出      在main.js 引用
export default createStore({
  //状态管理  通用的数据    数据改变时,组件中引用到此数据的内容都会发生改变
  state: {
    name:"张三丰",
    age: 198
  },
  //获取state中的数据  进行数据校验
  getters: {
    //自定义个方法 ,进行数据校验
    getAge(state){
      return state.age < 200 ? state.age: "张三丰只能活到200岁";
    }
  },
  //用于 更改state中的数据
  mutations: {
      //自定义个方法 ,进行数据修改 自定义参数numb
    addAge(state,numb){
      state.age +=numb;
    }
  },
  //Action 提交的是 mutation,而不是直接变更状态。
  //Action 可以包含任意异步操作。
  actions: {
       //自定义个方法 ,获取网络数据 进行数据修改 自定义参数numb
       asyncAddage({commit}){
        //http://www.csdnts.com/getTestData.jspx  域名是假的,后台接口已经处理了跨域问题
        //接口数据:[{"name":"张三丰","sex":"男","age":25},{"name":"周芷若","sex":"女","age":22}]
        axios.get("http://www.csdnts.com/getTestData.jspx")
        .then(res =>{
          console.log(res.data);
          //调用 mutations中 addAge方法  每次+25
          commit("addAge",(res.data[0]).age)
        })
        .catch(err =>{
          console.log(err);
        })
      }
  },
  //模块化管理vuex 允许我们将 store 分割成模块(module)。
  //每个模块拥有自己的 state、mutation、action、getter、
  //甚至是嵌套子模块——从上至下进行同样方式的分割
  modules: {
  }
})

代码:HelloWorld.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <!-- $store.state -->
    <p>方式一 state中的name->{{$store.state.name}}</p>
    <p>方式一 state中的age->{{$store.state.age}}</p>

    <!-- $store.getters -->
    <p>方式一 getters中的getAge()->{{$store.getters.getAge}}</p>

    <hr>
    <p>方式二 state中的name->{{name}}</p>
    <p>方式二 state中的age->{{age}}</p>

    <p>方式二 getters中的getAge()->{{getAge}}</p>

    <button @click="onClickaddAge">更改年龄数据</button>
    <button @click="asynconClickaddAge">获取网络数据更改年龄</button>
  </div>
</template>

<script>
//方式二 import  mapState
import { mapState } from 'vuex';
//方式二 import  mapGetters
import { mapGetters } from 'vuex';

// import  mapMutations
import { mapMutations } from 'vuex';
//  import  mapActions
import { mapActions } from 'vuex';

export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  //computed  
  computed:{
    //State 简化写法
    ...mapState(["name","age"]),
    //getters 
    ...mapGetters(["getAge"]),

  },
  methods:{
    //mutations 简化写法
    ...mapMutations(["addAge"]),
    onClickaddAge(){
      //this.$store.commit 调用getAge 参数 20
     // this.$store.commit("addAge",20)

     this.addAge(1);
    },
    //actions
    ...mapActions(["asyncAddage"]),
    asynconClickaddAge(){
      // this.$store.dispatch()  调用 asyncAddage()
      //this.$store.dispatch("asyncAddage")

      this.asyncAddage();
    }


  }

}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

代码:main.js

import { createApp } from 'vue'
import App from './App.vue'
import './registerServiceWorker'
//router
import router from './router'
//vuex
import store from './store'

//.use(store)
createApp(App).use(store).use(router).mount('#app')

代码:AboutView.vue

<template>
  <div class="about">
    <h1>关于-页面</h1>
    <!-- $store.state    直接引用  -->
    <p>方式一 state中的name->{{ $store.state.name }}</p>
    <p>方式一 state中的age->{{ $store.state.age }}</p>

    <!-- $store.getters -->
    <p>方式一 getters中的getAge()->{{$store.getters.getAge}}</p>

    <hr>
    <p>方式二 state中的name->{{name}}</p>
    <p>方式二 state中的age->{{age}}</p>
  </div>
</template>

<script>
//方式二 imper  mapState
import { mapState } from 'vuex';

export default {
  name: 'AboutView',
  //computed   获取State 中数据
  computed:{
    ...mapState(["name","age"])
  }
}
</script>

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

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

相关文章

RocketMQ主题下的队列只有两个被订阅

一、场景 主题下的队列只有两个被订阅 二、消费者 一共有两个消费者 Consumer1 所在消费组&#xff1a;C_TEST_1订阅主题&#xff1a;fsc_wb_ccs_web_orderly_84 Consumer2 所在消费组&#xff1a;C_TEST_1订阅主题&#xff1a;fsc_wb_ccs_web_84 三、原因 两个不同的消…

预演攻击:谁需要网络靶场,何时需要

"网络演习 "和 "网络靶场 "几乎是当今信息安全领域最流行的词汇。与专业术语不同的是&#xff0c;这些词对于企业和高级管理人员来说早已耳熟能详&#xff1a;法律要求他们进行演习&#xff0c;包括网络演习&#xff0c;而网络射击场也经常在企业界和媒体上…

数据生成 | MATLAB实现WGAN生成对抗网络数据生成

数据生成 | MATLAB实现WGAN生成对抗网络数据生成 目录 数据生成 | MATLAB实现WGAN生成对抗网络数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 1.WGAN生成对抗网络&#xff0c;数据生成&#xff0c;样本生成程序&#xff0c;MATLAB程序&#xff1b; 2.适用于MATL…

美能达打印机刷卡扫描文件后,用户收不到扫描邮件

环境: 柯尼卡美能达一体机 bizhub 287 域服务器 Windows server 2019 问题描述: 新员工在域服务器创建账户后同步到打印服务器上面,他们在打印机扫描文件后,自动发邮件那个邮箱上没有他们邮件,导致他们也收不到邮件 正常是用户在打印机上刷卡后扫描件文件为PDF格式,…

Jmeter 连接 MySQL 数据库脚本

1、创建线程组 2、创建 JDBC Connection Configuration 3、创建 JDBC Request 4、最终创建的目录 5、重点来了 5.1 在百度中下载个 MySQL-connector-Java-8.0.28.jar&#xff0c;放在 jmeter 的 bin 目录下 5.2 在测试计划中&#xff0c;将 jar 包添加到脚本中 5.3 输入参…

您可以购买 Banana Pi BPI-CM2 而不是 Raspberry Pi CM4。它提供什么?

最近&#xff0c;Banana Pi&#xff08;SINOVOIP&#xff09;推出了Banana Pi BPI-CM2系统级模块&#xff08;SoM&#xff09;。BPI-CM2 是类似于Raspberry Pi CM4 的计算模块&#xff0c;提供一系列令人印象深刻的功能。Banana BPI-CM2 SoM 采用Rockchip RK3568四核 Cortex-A5…

MMdetection在VisDrone2019上训练FCOS和CenterNet

配置环境 Python 3.5>PyTorch 1.1>CUDA 9.0NCCL 2>GCC 4.9mmcv‘’ 把mmdetection的代码下载下来 git clone https://github.com/open-mmlab/mmdetection.git进入这个mmdetection文件,准备编译mmdetection的文件 cd mmdetection 装一下下面这些包&#xff0c; #…

Three.js--》✨ 阳 光 dua 郎 大 男 孩 ✨——阿伟的自述

不要让鲲流太嚣张&#xff0c;我们杰流才是最弔的 ———— 阳光dua郎大男孩 目录 项目搭建 初始化three.js基础代码 获取项目所需素材 加载图片语音模型 今天简单实现一个three.js的3D故事小游戏&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能…

YOLOv5基础知识入门(7)— NMS(非极大值抑制)原理解析

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。NMS是指非极大值抑制&#xff08;non maximum suppression&#xff09;&#xff0c;它是一种常用于物体检测任务的算法。在物体检测中&#xff0c;通常会有多个预测框&#xff08;bounding box&#xff09;被提议出来&…

3D图像驱动live2d--Kalidokit--人脸动作捕捉

3D图像驱动live2d–Kalidokit 可在线实时根据摄像头中人脸动作实现动作捕捉 Kalidokit https://kit.kalidoface.com/live2d/ https://github.com/yeemachine/kalidokit

Spring系列篇--关于AOP【面向切面】的详解

目录 一.AOP是什么 二.案例演示 1.前置通知1.1 先准备接口 1.2然后再准备好实现类 1.3对我们的目标对象进行JavaBean配置 1.4 编写前置系统日志通知 1.5配置系统通知XML中的JavaBean 1.6 配置代理XML中的JavaBean 1.7 测试代码开始测试 注意这里有一个报错问题&…

谷歌在Chrome浏览器中推进抗量子加密技术

近日&#xff0c;Chromium博客上发表的一篇博文称&#xff0c;为了加强网络安全&#xff0c;应对迫在眉睫的量子计算机威胁&#xff0c;谷歌各个团队密切合作&#xff0c;为网络向抗量子密码学的过渡做好准备。 谷歌的Chrome团队在博客中写道&#xff0c;该项目涉及修订技术标准…

python3实现线性规划求解

Background 对于数学规划问题&#xff0c;有很多的实现。MatlabYALMIPCPLEX这个组合应该是比较主流的&#xff0c;尤其是在电力相关系统中占据着比较重要的地位。MATLAB是一个强大的数值计算工具&#xff0c;用于数学建模、算法开发和数据分析。Yalmip是一个MATLAB工具箱&#…

VS2022 CMake报错解决小结

目录 一、问题背景 二、问题分析 三、问题解决 一、问题背景 VS2022中能够跨平台的工程类型就是CMake项目&#xff0c;一套代码能跨windows/Linux/Mac多种操作系统。而实际使用时&#xff0c;发现相关资料比较少&#xff0c;需要摸索一下。 碰到的问题简述&#xff1a; 1、C…

VMware虚拟机Ubuntu无法连接网络的解决方法

一、解决办法 网络适配器设置 终端依次执行下面命令即可 sudo nmcli networking off sudo nmcli networking onsudo service network-manager start #或者 sudo service NetworkManager start成功出现这个图标&#xff0c;即代表网络连接成功。

Ubuntu中安装OpenSSL

文章目录 一、前期准备1.1 压缩包下载1.2 gcc, make等的安装二、安装配置 一、前期准备 1.1 压缩包下载 在安装openssl之前&#xff0c;我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可以选择win上下载后解压再复制到本地虚拟机中…

python学习笔记——软件安装

目录 1. 安装并验证Python环境 2. 安装并设置Visual Studio Code编辑器 3. 设置Visual Studio Code编辑器 4.软件安装包 1. 安装并验证Python环境 首先&#xff0c;双击打开python安装包。 注意⚠️ &#xff1a; 安装之前需要关闭杀毒软件&#xff0c;比如360。 然后&am…

盘点九个可使用免费CDN的云服务商(2023版)

CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络&#x…

利用文本探测(text-detection)手写一个文本区域mask的生成

今天遇到这样一个需求&#xff1a;需要针对用户输入的图片生成对应文本区域的mask&#xff0c;按理说这应该是一个很容易实现的问题。 初步设想 要生成对应区域的mask&#xff0c;首先要找到文本所在的位置&#xff0c;针对不同的图片&#xff0c;文本位置自然是不同的&#xf…

每日一题——不同路径的数目(一)

题目 一个机器人在mn大小的地图的左上角&#xff08;起点&#xff09;。 机器人每次可以向下或向右移动。机器人要到达地图的右下角&#xff08;终点&#xff09;。 可以有多少种不同的路径从起点走到终点&#xff1f; 数据范围&#xff1a;0<n,m≤100&#xff0c;保证计算结…