VueX 使用

news2024/11/16 7:37:30

1.简介

就是用来多组件共享数据的实现用的

  

2.使用VueX

 因为使用的是vue2 所以下的是vuex3 若是vue3 必须下的是 vue4  

npm i vuex@3

3.搭建环境

1.创建 src/store/index.js

//该文件用于创建一个Vuex中最为核心的store

//引入VueX
import Vuex from 'vuex'
import Vue from 'vue'
//准备 actions - 用于响应组件中的动作
const actions = {}

//准备 mutations - 用于操作数据(state)
const mutations = {}


//准备 state - 用于存储数据
const state = {}

Vue.use(Vuex)

//创建 store
const store = new Vuex.Store({
    actions,
    mutations,
    state
});

//暴露store
export default store;

2.main.js引入

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

//引入store
import store from './store/index'

//关闭Vue的生产提示
Vue.config.productionTip = false

//应用插件
// import plugins from './plugins'
//使用插件
// Vue.use(plugins,1,3,2,5,6)

// const d = Vue.extend({}); 

// Vue.prototype.eventBus= new d();

//使用插件
Vue.use(vueResource)


//创建vm
new Vue({
    el: '#app',
    render: (h) => h(App),//放入构造出 App组件模板
    store,
    beforeCreate() {
        Vue.prototype.$bus = this; //安装全局事件总线
        // console.log(this);

    }
})

3.使用

store 下 建 index.js

//该文件用于创建一个Vuex中最为核心的store

//引入VueX
import Vuex from 'vuex'
import Vue from 'vue'
//准备 actions - 用于响应组件中的动作
const actions = {
    jia(context,value){
        console.log('actions中的jia被调用了',context ,value);
        context.commit('JIA',value);
        
    },
    jian(context,value){
        console.log('actions中的jian被调用了',context ,value);
        context.commit('JIAN',value);
        
    },
    jiaOdd(context,value){
        console.log('actions中的jiaOdd被调用了',context ,value);
        if(context.state.sum % 2){
            context.commit('JIA',value);
        }
    },
    jiaWait(context,value){
        console.log('actions中的jiaWait被调用了',context ,value);
        setTimeout(() => {
            context.commit('JIA',value);
        }, 1000);
    }
}

//准备 mutations - 用于操作数据(state)
const mutations = {
    JIA(state,value){
        console.log('mutations中的jia被调用了',state ,value);
        state.sum+=value;
    },
    JIAN(state,value){
        console.log('mutations中的jian被调用了',state ,value);
        state.sum-=value;
    }
}


//准备 state - 用于存储数据
const state = {
    sum:0,
}

Vue.use(Vuex)

//创建 store
const store = new Vuex.Store({
    actions,
    mutations,
    state
});

//暴露store
export default store;

4.在组件中调用

<template>
  <div>
    <h2>当前求和为:{{ $store.state.sum }}</h2>
    <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="decrement">-</button>
    <button @click="incrementOdd">当前求和为奇数再加</button>
    <button @click="incrementWait">等一等再加</button>
  </div>
</template>

<script>
export default {
  name: "CountComponent",
  data() {
    return {
      n: 1,
    };
  },
  methods: {
    increment() {
      this.$store.commit("JIA", this.n);
    },
    decrement() {
      this.$store.commit("JIAN", this.n);
    },
    incrementOdd() {
        this.$store.dispatch("jiaOdd", this.n);
    },
    incrementWait() {
        this.$store.dispatch("jiaWait", this.n);
    },
  },
};
</script>

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

4.getters的使用

相当于全局的计算属性

 5.mapActions mapGetter mapState mapMutations

 

6. 多组件共享数据

直接调用里面的数据就行,都是共享的

7.模块化加命名空间

<template>
  <div>
    <h2>当前求和为:{{ sum }}</h2>
    <h2>当前求和放大10倍为:{{ bigSum }}</h2>
    <h2>我在{{ school }} 学习 {{ subject }}</h2>
    <h2>Persion组件的总人数是:{{personList.length}}</h2>
    <select v-model.number="n">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="JIA(n)">+</button>
    <button @click="JIAN(n)">-</button>
    <button @click="jiaOdd(n)">当前求和为奇数再加</button>
    <button @click="jiaWait(n)">等一等再加</button>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions } from "vuex";
export default {
  name: "CountComponent",
  data() {
    return {
      n: 1,
    };
  },
  computed: {
    ...mapState('countAbout',["sum", "school", "subject"]), //同名就可以这样写
    ...mapState('personAbout',['personList']), //同名就可以这样写
    ...mapGetters('countAbout',["bigSum"]),
  },
  methods: {
    ...mapMutations('countAbout',["JIA", "JIAN"]),
    ...mapActions('countAbout',["jiaOdd", "jiaWait"]),
  }

};
</script>

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

 

<template>
  <div>
    <h1>人员列表</h1>
    <h1>Count组件求和为:{{sum}}</h1>
    <h3>列表中第一个人的名字是{{firstPersonName}}</h3>
    <input type="text" placeholder="请输入名字" v-model="name">
    <button @click="add">添加</button>
    <button @click="addWang">添加一个姓王的人</button>
    <button @click="addOfNet">添加一个网络请求的人</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:'PersonComponent',
  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(){
          const personObj = {id:nanoid(),name:this.name};
          console.log(this.$store);
          this.$store.commit('personAbout/ADD_PERSON',personObj)
          
      },
      
      addWang(){
          const personObj = {id:nanoid(),name:this.name};
          console.log(this.$store);
          this.$store.dispatch('personAbout/addPersonWang',personObj)
          
      },
       addOfNet(){
          this.$store.dispatch('personAbout/addPersonServer')
          
      }
  }
}
</script>

<style>

</style>
//该文件用于创建一个Vuex中最为核心的store

//引入VueX
import Vuex from 'vuex'
import Vue from 'vue'

import countOptions from './count'
import persionOptions from './person'




Vue.use(Vuex)

//创建 store
const store = new Vuex.Store({
    modules: {
        countAbout: countOptions,
        personAbout: persionOptions
    }
});

//暴露store
export default store;
//人员管理相关配置
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);
            }
        },
        addPersonServer(context){
            axios.get('http://localhost:8080/atjmj/students/atjmj').then(res => {
                console.log(res.data);
                context.commit('ADD_PERSON', {id: nanoid(), name: res.data[0].name});
            }).catch(err => {
                console.log(err);
            })
        }
    },
    mutations: {
        ADD_PERSON(state, value) {
            console.log('mutations中的ADD_PERSON被调用了', state, value);
            state.personList.unshift(value);
        }
    },
    state: {

        personList: [
            { id: '001', name: '张三' }
        ]
    },
    getters: {
        firstPersonName(state) {
            return state.personList[0].name;
        }
    }
}
//求和相关配置
export default {
    namespaced: true,
    actions: {
        jiaOdd(context, value) {
            console.log('actions中的jiaOdd被调用了', context, value);
            if (context.state.sum % 2) {
                context.commit('JIA', value);
            }
        },
        jiaWait(context, value) {
            console.log('actions中的jiaWait被调用了', context, value);
            setTimeout(() => {
                context.commit('JIA', value);
            }, 1000);
        }
    },
    mutations: {

        JIA(state, value) {
            console.log('mutations中的jia被调用了', state, value);
            state.sum += value;
        },
        JIAN(state, value) {
            console.log('mutations中的jian被调用了', state, value);
            state.sum -= value;
        }
    },
    state: {
        sum: 0,
        school: '尚硅谷',
        subject: '前端',
    },
    getters: {
        bigSum(state) {
            return state.sum * 10;
        }
    }
}
<template>
  <div class="appContainer">
  
  <CountComponent/>
  <PersonComponent/>

  </div>
</template>

<script>
import CountComponent from './components/CountComponent.vue';
import PersonComponent from './components/PersonComponent.vue';

export default {
  name: "App",

  components: {
    CountComponent,PersonComponent
  },
  methods: {},
};
</script>

<style scoped>
.appContainer {
  padding: 5px;
  display: flex;
  flex-direction: column; /* 垂直方向排列子元素 */
  justify-content: center;
   align-items: center;  
}

</style>

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

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

相关文章

springboot功能模块之POI操作Excel

一、前言 文件的导入导出: 这个功能主要就是帮助我们的用户能够快速的将数据导入到数据库中,不用在自己手动的一条一条的将数据新增到我们的数据库中.同时又能够方便我们能够将数据导出之后打印出来给领导们查看.不用非得带着电脑这里那里的跑.非常实用的功能. 文件的导入导…

Android低内存设备系统优化

切记,所有的优化都遵循一条准则: 空间换时间,时间换空间。 一、前言 我们为什么会觉得卡顿、不流畅? 卡顿等性能问题的最主要根源都是因为渲染性能,Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出信号,触发对UI进行渲染,如果每次渲染…

android13顶部状态栏里面调节背光 背景闪烁问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 android13顶部状态栏里面调节背光, 背景闪烁问题,会出现画面不全问题,如下图 2.问题分析 这里看起来是由于隐藏的时候,界面显示是一个渐变的隐藏,但是后面的背景又是…

NVDLA专题12:具体模块介绍——LUT Programming

LUT编程 LUT是NVDLA中SDP/CDP的实例&#xff0c;用于模拟神经网络中的非线性函数(Sigmoid/TanH/LRN等。)。我们知道&#xff0c;LUT精度高度依赖于LUT entry和曲线的斜率变化:LUT entry越多&#xff0c;精度越高。另一方面&#xff0c;曲线的斜率变化越大&#xff0c;越难模拟…

怎么把pdf文件转html格式?5个pdf转html方法学起来(超简单)

在信息化快速发展的今天&#xff0c;各种文件格式层出不穷。作为一种常见的文件格式&#xff0c;PDF因其跨平台的优势被广泛应用于文档的分享与存储。然而&#xff0c;随着网页技术的进步&#xff0c;越来越多的用户希望将PDF文档转换为HTML格式&#xff0c;以便在网页上进行编…

第三方软件测评中心分享:软件系统测试内容和作用

近年来&#xff0c;随着信息技术的迅猛发展&#xff0c;软件系统的应用范围不断扩大。保证软件质量的关键措施之一就是软件系统测试。软件系统测试是指在软件开发生命周期中&#xff0c;通过一系列特定的测试活动来验证和确认软件系统的性能、功能及安全性&#xff0c;确保软件…

使用大模型撰写移动机器人模拟器(CoppeliaSim、Gazebo、MORSE和Webots)的定量比较研究报告

使用大模型辅助阅读移动机器人模拟器&#xff08;CoppeliaSim、Gazebo、MORSE和Webots&#xff09;的定量比较研究报告-CSDN博客 表格总结 以下是对全文进行学术性科学总结的一系列表格&#xff1a; 1. 摘要表格 类别描述文章标题如何选择移动机器人模拟器&#xff1a;对Copp…

Spring Boot实战:使用模板方法模式优化数据处理流程

概述 在软件开发过程中&#xff0c;我们经常需要处理各种各样的数据&#xff0c;这些数据可能来自不同的源&#xff0c;比如数据库、文件系统或者外部API等。尽管数据来源不同&#xff0c;但很多情况下处理这些数据的步骤是相似的&#xff1a;读取数据、清洗数据、转换数据格式…

easyexcel--导入导出实现自定义格式转换

自定义格式 我们在数据库设计的时候经常会有枚举类型&#xff0c;如0表示普通用户&#xff0c;1表示VIP用户等&#xff0c;这在excel导入的时候&#xff0c;我们会填普通用户而不是0&#xff0c;这样就需要用到自定义格式把普通用户转换成0&#xff0c;我写了一个通用的抽象类…

使用 C/C++访问 MySQL

目录 准备工作 尝试链接 MySQL Client MySQL 接口介绍 准备工作 保证 MySQL 服务有效。下载MySQL开发包&#xff08;可以在MySQL官网下载安装也可以在软件源安装&#xff09; MySQL 开发包通常会包含一些特定的头文件和库文件。您可以检查以下常见的路径&#xff1a; /us…

C++ 11 的新增特性

一.列表初始化 1.1 { }初始化 在C 11 中扩大了 大括号{ } 的使用范围&#xff0c;我们可以使用大括号初始化内置类型对象和自定义类型对象&#xff0c;可以在使用时加上 等于 &#xff0c;不加也可以&#xff0c;但是还是建议加上。 在初始化对象时我们就可以像以下方式初始化…

如何用Chatgpt制作流程图呢?

小说推文—— AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/流程图的本质&#xff0c;是对文本信息的整合组织&#xff0c;是对逻辑关系的可视化呈现。而大语言模型非常擅长从给定的…

C++策略模式:萧炎打架~

目录 策略模式步骤例子&#xff1a;萧炎使用技能打架给出UML图1&#xff1a;定义技能策略2&#xff1a;实现技能策略3&#xff1a;定义萧炎类4&#xff1a;萧炎遇到强劲的敌人5&#xff1a;战斗过程 策略模式 策略模式是一种行为设计模式&#xff0c;它定义了一系列算法&#…

学姐说,WebGIS面试八股文不会也得背!会!

本文全是干货&#xff0c;内容来一线GIS开发工程师&#xff0c;目前是中地数码集团、新中地GIS开发特训营高级讲师&#xff0c;从事GIS软件开发工作8年&#xff0c;拥有丰富的软件开发和项目研发经验&#xff0c;对webGIS、桌面GIS开发有较深研究&#xff0c;深谙GIS开发面试的…

玩转单例模式

目录 1. 饿汉式 2. 懒汉式 3. volatile解决指令重排序 4. 反射破坏单例模式 5. 枚举实现单例模式 6. 枚举实现单例模式的好处 7.尝试反射破坏枚举 所谓单例模式&#xff0c;就是是某个类的实例对象只能被创建一次&#xff0c;单例模式两种实现&#xff1a;饿汉式和懒汉…

unity程序简易框架

1. 框架基本结构 2. 单例模式基类模块 2.1 BaseManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class BaseManager<T> where T:new() {private static T instance;public static T GetInstance(){if (instance == …

直播预约|2024 乐鑫科技全球开发者大会亮点揭秘

时隔一年&#xff0c;2024 乐鑫科技全球开发者大会将在 9 月 3-5 日如约而至。这一年&#xff0c;人工智能给物联网领域带来了哪些变化&#xff1f;乐鑫在 AIoT 领域实现了哪些新突破&#xff1f;ESP-IDF 经过升级后增添了哪些新功能&#xff1f;ESP32-P4、ESP32-C6 迎来了怎样…

C语言指针详解-上

C语言指针详解-上 前言1.指针的基本概念1.1指针是什么1.2指针的声明与初始化1.3取地址符&和解引用符*& 运算符用于**获取变量的地址*** 运算符用于访问指针指向的值 2.指针的类型常见数据类型的指针指针与数组、字符串数组指针结构体指针函数指针二级指针void指针 3.指…

多级评论的实现,评论回复功能(两层型)

前言&#xff1a; 技术栈&#xff1a;springboot mysql mybatis 比着写一遍&#xff0c;你也一定会实现多级评论的功能&#xff0c;简单易上手&#xff01; 1.效果 整体的结构只有两层&#xff0c;但是确实现了评论回复功能 [ { "id": 2, "userId": …

让JMeter测试数据生成更容易

让JMeter测试数据生成更容易 背景&#xff1a; 在软件测试过程中&#xff0c;为了确保系统的稳定性和可靠性&#xff0c;需要对各种场景进行全面的测试。而不同的场景往往需要各种各样的测试数据&#xff0c;这些数据需要具有一定的真实性和多样性&#xff0c;以模拟实际使用…