Vuex实现数据共享

news2024/11/18 20:20:12

目录

一:index.js的创建

二:index.js的引入

三:Count.vue

四:App.vue的使用

五:mapstate等的使用

五:多组件数据共享(模块化编程)


vc通过dispatch联系actions,actions通过commit联系mutations。

Mutations可以通过Mutate修改State。

Vuex小案例

一:index.js的创建

src/store/index.js的创建

import Vuex from 'vuex'
import Vue from 'vue'
const actions = {
    jiaOdd(context,value){
        if(context.state.sum % 2){
            context.commit('JIA',value);
        }
    },
    jiaWait(context,value){
        setTimeout(() => {
            context.commit('JIA',value);
          }, 500);
    }
}
const mutations = {
    JIA(state,value){
        state.sum+=value;
    },
    JIAN(state,value){
        state.sum-=value;
    }
}
const state = {sum: 0,school:'中北大学',sname:'任彪煜'}
const getters = {
    bigSum(state){
        return state.sum * 10;
    }
}
Vue.use(Vuex)
const store = new Vuex.Store({
    actions,
    mutations,
    state,
    getters,
})
export default store;

二:index.js的引入

import Vue from 'vue'
import App from './App.vue'
import store from './store/index.js';
Vue.config.productionTip = false;
//创建vm
new Vue ({
    render:h=>h(App),
    store,
}).$mount('#app')

三:Count.vue

<template>
  <div>
    <h1>当前求和为:{{ sum }}</h1>
    <h1>扩大值为:{{ bigSum }}</h1>
    <h2>{{ sname }}</h2>
    <h2>{{ school }}</h2>
    <select v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="ind">+</button>
    <button @click="de">-</button>
    <button @click="cur">奇数加</button>
    <button @click="wait">等一等加</button>
  </div>
</template>

<script lang="ts">
import { mapState, mapGetters } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      n: 1,
    };
  },
  methods: {
    ind() {
      this.$store.commit("JIA", this.n);
    },
    de() {
      this.$store.commit("JIAN", this.n);
    },
    cur() {
      this.$store.dispatch("jiaOdd", this.n);
    },
    wait() {
      this.$store.dispatch("jiaWait", this.n);
    },
  },
  computed: {
    ...mapState(["sum", "school", "sname"]),
    ...mapGetters(["bigSum"]),
  },
};
</script>

四:App.vue的使用

<template>
  <div>
    <Count />
  </div>
</template>
<script>
import Count from "./components/Count.vue";
export default {
  name: "App",
  components: {
    Count,
  },
};
</script>
<style>
button {
  margin-left: 5px;
}
</style>

五:mapstate等的使用

<template>
  <div>
    <h1>当前求和为:{{ sum }}</h1>
    <h1>扩大值为:{{ bigSum }}</h1>
    <h2>{{ sname }}</h2>
    <h2>{{ school }}</h2>
    <select v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="ind(n)">+</button>
    <button @click="de(n)">-</button>
    <button @click="cur(n)">奇数加</button>
    <button @click="wait(n)">等一等加</button>
    <hr />
    <ul>
      <li v-for="p in personList" :key="p.id">{{ p.name }}</li>
    </ul>
  </div>
</template>

<script lang="ts">
import { mapState, mapGetters, mapActions, mapMutations } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      n: 1,
    };
  },
  // methods: {
  //   ind() {
  //     this.$store.commit("JIA", this.n);
  //   },
  //   de() {
  //     this.$store.commit("JIAN", this.n);
  //   },
  //   cur() {
  //     this.$store.dispatch("jiaOdd", this.n);
  //   },
  //   wait() {
  //     this.$store.dispatch("jiaWait", this.n);
  //   },
  // },
  computed: {
    ...mapState(["sum", "school", "sname", "personList"]),
    ...mapGetters(["bigSum"]),
  },
  methods: {
    ...mapActions({ cur: "jiaOdd", wait: "jiaWait" }),
    ...mapMutations({ ind: "JIA", de: "JIAN" }),
  },
};
</script>

五:多组件数据共享(模块化编程)

App.vue和main.js和上面一样

index.js

import Vuex from 'vuex'
import Vue from 'vue'
import { name } from 'pubsub-js';

const personeExm = {
    namespaced: true,
    actions:{
        addPersonWang(context,value){
            if(value.name.indexOf('王') === 0){
                context.commit('ADD',value);
            }
        }
    },
    mutations:{
        ADD(state,value){
        state.personList.unshift(value)
        }
    },
    state:{
        personList:[
        {id:'001',name:'张三'},
        {id:'002',name:'李四'}
        ]
    },
    getters:{
        getFirstName(state){
            return state.personList[0],name;
        }
    }
}
const numberExm={
    namespaced:true,
    actions:{
        jiaOdd(context,value){
            if(context.state.sum % 2){
                context.commit('JIA',value);
            }
        },
        jiaWait(context,value){
            setTimeout(() => {
                context.commit('JIA',value);
              }, 500);
        }
    },
    mutations:{
        JIA(state,value){
            state.sum+=value;
        },
        JIAN(state,value){
            state.sum-=value;
        },
    },
    state:{
        sum: 0,
        school:'中北大学',
        sname:'任彪煜',
    },
    getters:{
        bigSum(state){
            return state.sum * 10;
        }
    }
}
Vue.use(Vuex)
const store = new Vuex.Store({
    modules:{
        person:personeExm,
        number:numberExm
    }
});
export default store;

Count.vue

<template>
  <div>
    <h1>当前求和为:{{ sum }}</h1>
    <h1>扩大值为:{{ bigSum }}</h1>
    <h2>{{ sname }}</h2>
    <h2>{{ school }}</h2>
    <select v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="ind(n)">+</button>
    <button @click="de(n)">-</button>
    <button @click="cur(n)">奇数加</button>
    <button @click="wait(n)">等一等加</button>
    <hr />
    <ul>
      <li v-for="p in personList" :key="p.id">{{ p.name }}</li>
    </ul>
  </div>
</template>

<script lang="ts">
import { mapState, mapGetters, mapActions, mapMutations } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      n: 1,
    };
  },
  // methods: {
  //   ind() {
  //     this.$store.commit("JIA", this.n);
  //   },
  //   de() {
  //     this.$store.commit("JIAN", this.n);
  //   },
  //   cur() {
  //     this.$store.dispatch("jiaOdd", this.n);
  //   },
  //   wait() {
  //     this.$store.dispatch("jiaWait", this.n);
  //   },
  // },
  computed: {
    ...mapState("number", ["sum", "school", "sname"]),
    ...mapState("person", ["personList"]),
    ...mapGetters("number", ["bigSum"]),
  },
  methods: {
    ...mapActions("number", { cur: "jiaOdd", wait: "jiaWait" }),
    ...mapMutations("number", { ind: "JIA", de: "JIAN" }),
  },
};
</script>

Person.vue

<template>
  <div>
    <h1>count组件中的sum{{ sum }}</h1>
    <h1>人员列表</h1>
    <input type="text" placeholder="请输入名字" v-model="name" />
    <button @click="add()">添加</button>
    <button @click="addPerson()">添加王</button><br />
    <ul>
      <li v-for="p in personList" :key="p.id">{{ p.name }}</li>
    </ul>
    <h1>第一个人的名字{{ getFirstName }}</h1>
  </div>
</template>

<script lang="ts">
import { nanoid } from "nanoid";
import { mapState, mapActions, mapGetters, mapMutations } from "vuex";
export default {
  name: "Person",
  data() {
    return {
      name: "",
    };
  },
  methods: {
    add() {
      const perobj = { id: nanoid(), name: this.name };
      this.$store.commit("person/ADD", perobj);
      this.name = "";
    },
    addPerson() {
      const perobj = { id: nanoid(), name: this.name };
      this.$store.dispatch("person/addPersonWang", perobj);
      this.name = "";
    },
  },
  computed: {
    ...mapState("person", ["personList"]),
    ...mapState("number", ["sum"]),
    ...mapGetters("person", ["getFirstName"]),
  },
};
</script>

<style scoped></style>

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

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

相关文章

Python小姿势 - ###### 随机选取的知识点:Python日期时间处理

随机选取的知识点&#xff1a;Python日期时间处理 Python日期时间处理&#xff1a;一种更简单的方式 日期和时间处理是许多程序中必不可少的部分。Python提供了一个标准库来处理日期和时间&#xff0c;这个库叫做datetime&#xff0c;它提供了一些类来处理不同的日期和时间格式…

远程访问及控制(SSH)

远程访问及控制&#xff08;SSH&#xff09; 一、SSH远程管理二、SSH服务1、ssh远程登录方式2、scp远程复制3、sftp安全FTP4、sshd配置文件5、ssh密钥对配置5.1 ssh密钥对免交互登录 三、TCP wrappers 访问控制1、**TCP wrappers &#xff08;TCP封套&#xff09;**2、**TCP wr…

会话与会话技术(Cookie)

Web应用中的会话过程指的是一个客户端&#xff08;浏览器&#xff09;与Web服务器之间连续发生的一系列请求和响应过程 为保存会话过程产生的数据&#xff0c;Servlet提供了两个用于保存会话数据的对象&#xff0c;分别是Cookie和Session 1、Cookie对象 Cookie是一种会话技术…

SS524V100 RTL8152B(USB转网卡)驱动移植

目录 前言 1. 内核下 USB Host 配置过程 2. 内核下 RTL8152 驱动配置 3. 重新编译内核 4. 测试USB转网卡 5. 总结 前言 本文主要是描述 SS524V100 对 RTL8152B(百兆网卡) 开发、移植的过程。 1. SS524V100 的 USB 2.0 支持 Host 模式&#xff1b; 2. 内核默认自带驱动…

0环境教你怎么安装配置GPU环境运行车流量检测代码

项目效果&#xff1a; python车流量检测双向车流计数 1、环境配置 1.1 安装显卡加速工具 (1) 安装CUDA和cudnn NVIDIA CUDA 深度神经网络库 (cuDNN) 是经 GPU 加速的深度神经网络基元库。cuDNN 可大幅优化标准例程&#xff08;例如用于前向传播和反向传播的卷积层、池化层、…

4月23日作业

#include <iostream> #include <cstring> using namespace std; class Student //学生类 { private: string name; //姓名 int year; //年龄 double sorce; //分数 public: Student (){} //无参构造 Student(string a,int b,double c):name(a),y…

五分钟学会在微信小程序中使用 vantUI 组件库

前言 我们在开发微信小程序时&#xff0c;设计和实现好用的用户界面无疑是至关重要的一步。但是微信小程序官方自带的 UI 组件库无法满足很多使用场景&#xff0c;这个时候就需要我们使用一些第三方的 UI 组件库。而 vant Weapp 作为一款优秀的前端 UI 组件库&#xff0c;可以帮…

MP长篇综述 | 植物泛基因组及其应用

2022年12月15日&#xff0c;中山大学史俊鹏副教授、中国科学院遗传与发育生物学研究所田志喜研究员、中国农业大学赖锦盛教授和上海师范大学黄学辉教授共同撰文&#xff0c;在Molecular Plant杂志发表了题为“Plant pan-genomics and its applications”的长篇综述。该论文对植…

(Ubuntu22.04 Jammy)安装ROS2 Humble

文章目录 (Ubuntu22.04 Jammy)安装ROS2 (Humble)版本一、设置本地区域二、设置源三、安装ROS2软件包四、环境设置五、测试用例Talker-listener 六、卸载ros2 (Ubuntu22.04 Jammy)安装ROS2 (Humble)版本 提示&#xff1a;以下内容是已经安装了ubuntu22.04 下进行安装ros2 一、设…

iptables防火墙和Firewalld

引言 在 Internet 中&#xff0c;企业通过各种应用系统来为用户提供各种服务&#xff0c;如 Web 网站、电子邮件系统、FTP 服务器、数据库系统等&#xff0c;那么&#xff0c;如何来保护这些服务器&#xff0c;过滤企业不需要的访问甚至是恶意的入侵呢&#xff0c;接下来&#…

设计模式--建造者模式

项目需求 盖房需求 (1) 需要建房子:过程为 打地基 砌墙 封顶 (2) 房子有高正各样的,比如 平房和高楼 建房子的过程虽然都一样 但是要求不要相同的细节 传统方式 public abstract class TraditionBuild {//打地基public abstract void foundation();//砌墙public abstract voi…

Linux进程的fork、exit、wait等函数;区分父子进程;GDB调试多进程

Linux系统中进程可以创建子进程。 1. fork函数&#xff1a;创建新进程 #include<sys/types.h> #include<unistd.h>pid_t fork(void); /* 功能&#xff1a;一个进程创建新进程。原进程为父进程&#xff0c;新进程为子进程。 返回值&#xff1a;成功&#xff1a;子…

SuperMap iObjects Docker打包全攻略

SuperMap iObjects Docker打包全攻略 文章目录 SuperMap iObjects Docker打包全攻略说明开始打包iObjects容器启动容器参考 说明 此教程编写时使用的iObjects版本为 10.2.1 &#xff0c;理论高版本同样支持&#xff0c;具体自测。基础镜像为 Docker 官方 ubuntu:16.04完整版。…

C++ 类和对象(中)构造函数 和 析构函数

上篇链接&#xff1a;C 类和对象&#xff08;上&#xff09;_chihiro1122的博客-CSDN博客 类的6个默认成员函数 我们在C当中&#xff0c;在写一些函数的时候&#xff0c;比如在栈的例子&#xff1a; 如上述例子&#xff0c;用C 返回这个栈是否为空&#xff0c;直接返回的话&am…

基于OpenCV-python的图像增强和滤波

目录 彩色空间 直方图均衡化 图像滤波 梯度 一、彩色空间 OpenCV 的颜色空间主要有 BGR、HSV、Lab等&#xff0c;cvtColor 函数可以让图像在不同颜色空间转换。例如通过将花的图像转换到 HSV 颜色空间&#xff0c;在HSV空间内过滤出只含有花瓣颜色的像素&#xff0c;从而提…

公共资源包发布流程详解

文章目录 公有包发布并使用npm安装git仓库协议创建及使用 npm 私有包创建及使用 group npm 私有包私有仓账密存放位置 当公司各个系统都需要使用特定的业务模块时&#xff0c;这时候将代码抽离&#xff0c;发布到 npm 上&#xff0c;供下载安装使用&#xff0c;是个比较好的方案…

SQL Server基础 第七章 连接查询(内连接、表别名、左外连接、右外连接)

前言 连接查询是关系数据库中最主要的查询&#xff0c;主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。前面章节的查询均是基于单表进行&#xff0c;但有时需要获取的信息存储于多张表中&#xff0c;此时就必须使用本章所介绍的多表连接查询技术来获取…

关于debug一晚上的一些思考,做开发到底要养成什么习惯?

总结&#xff1a;日志一定要写&#xff0c;日志一定要写&#xff0c;日志一定要写&#xff01; 今天晚上是我学开发过程中很不一样的一晚&#xff0c;今晚学到了很多。 虽然我也只是一个开发的初学小白&#xff0c;今天的debug分享是我的一个小方法和一个小记录&#xff0c;如…

第四章——数学知识2

欧拉函数 欧拉函数表示的是1-n中与n互质数的个数。 如1-6中&#xff1a;1&#xff0c;5都和6互质&#xff0c;因此互质数为2 欧拉函数分解质因数后表示为&#xff1a; 互质数个数可表示为 int main() {int n;cin >> n;while(n--){int a;cin >> a;//分解质因数int r…

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司&#xff1a;微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…