当前位置: 首页 > article >正文

Vue-53、Vue技术vuex使用

vuex 是什么

1、概念

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

2、什么使用vuex

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

vuex 工作原理图

在这里插入图片描述

使用

1、安装vuex (注意vue2中,要使用vuex的3版本,vue3中,要使用vuex的4版本)

vue2 安装

npm i vuex@3 

vue3 安装

npm i vuex@4

2、在src新建vuex文件夹。在vuex文件下新进stors.js文件(store源码如下)

//改文件用于创建最为核心的store
//引入vue
import Vue from "vue";
//引入vuex
import Vuex from 'vuex';
//使用
Vue.use(Vuex);
//准备actions- 用于响应组件中的动作
const actions = {};
//准备mutations- 用于操作数据(state)
const mutations = {};
//准备state- 用于存储数据(state)
const state = {};
//创建store
const store = new Vuex.Store({
    actions,
    mutations,
    state
});
//暴露store
export default store;

3、在main.js中引入和使用

......
//引入vuex
import Vuex from 'vuex'
//引入store
import store from './vuex/store';
//使用
Vue.use(Vuex);


......
new Vue({
  render: h => h(App),
  ....
   store,
  .....
 
}).$mount('#app');

4、store.js增加数据及相应处理处方法 完整代码如下

//改文件用于创建最为核心的store
//引入vue
import Vue from "vue";
//引入vuex
import Vuex from 'vuex';
//使用
Vue.use(Vuex);
//准备actions- 用于响应组件中的动作
const actions = {
    jia:function (context,value) {
        console.log('action中的jia被调用了',context,value);
        context.commit('JIA',value)
    },

    jian:function (context,value) {
        context.commit('JIAN',value);
    },

    SumOdd:function (context,value) {
        context.commit('SUMODD',value)
    },
};
//准备mutations- 用于操作数据(state)
const mutations = {
    JIA(state,value){
        console.log('mutation中的JIA被调用了',state,value);
        state.sum += value;
    },
    JIAN(state,value){
        state.sum -= value;
    },
    SUMODD(state,value){
        if (state.sum % 2){
            state.sum += value;
        }
    }
};
//准备state- 用于存储数据(state)
const state = {
    sum:0 //当前的和
};
//创建store
const store = new Vuex.Store({
    actions,
    mutations,
    state
});
//暴露store
export default store;

5、调用

<template>
    <div >
        <h1>当前求和为:{{$store.state.sum}}</h1>
        <select v-model.number="number">
            <option value="1">1</option>
            <option value="2">2</option>
            <option  value="3">3</option>
        </select><br>
        <button @click="addSum">+</button>
        <button @click="reduceSum">-</button>
        <button @click="addSumOdd">当前和为奇数再加</button>
        <button @click="addSumWait">等等在加</button>
    </div>
</template>
<script>
    export default {
        name: "Category",
        data(){
            return{
                number:1,
            }
        },
        methods:{
            addSum(){
                //this.$store.dispatch('jia',this.number)
                this.$store.commit('JIA',this.number)
            },
            reduceSum(){
                this.$store.dispatch('jian',this.number)

            },
            addSumOdd(){
                this.$store.dispatch('SumOdd',this.number)
            },
            addSumWait(){
                setTimeout(()=>{
                    this.$store.dispatch('jia',this.number)
                },500)
            }
        },
        mounted() {
            console.log(this)
        }
    }
</script>

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

6、getters的使用
在store.js 新增

//准备getters--用于将state中的数据进行加工
const getters = {
    bigSum(state){
        return state.sum*10
    }
};


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

调用

  <h1>当前求和放大10倍为:{{$store.getters.bigSum}}</h1>

http://www.kler.cn/a/234354.html

相关文章:

  • #include<string>和#include<string.h>有什么区别
  • Unity3D实现视频和模型融合效果
  • 什么是数字图像?
  • 【再谈设计模式】抽象工厂模式~对象创建的统筹者
  • Xcode 16 使用 pod 命令报错解决方案
  • [ Linux 命令基础 3 ] Linux 命令详解-文件和目录管理命令
  • 数据结构之基数排序
  • Pandas 对带有 Multi-column(多列名称) 的数据排序并写入 Excel 中
  • Java并发基础:LinkedBlockingDeque全面解析!
  • prometheus之redis_exporter部署
  • 数字孪生:构建未来智慧社区的关键技术
  • CVE-2022-0760 漏洞复现
  • 微服务OAuth 2.1认证授权可行性方案(Spring Security 6)
  • 爬虫为什么要使用代理?
  • Huggingface上传模型
  • 新型RedAlert勒索病毒针对VMWare ESXi服务器
  • PyTorch 2.2大更新!集成FlashAttention-2,性能提升2倍
  • 代码随想录 Leetcode55. 跳跃游戏
  • HiveSQL——设计一张最近180天的注册、活跃留存表
  • 自适应二次元404页面源码
  • antdpro框架npm install 报错,切换tyarn安装成功。
  • 2/7 算法每日N题(二分+双指针)
  • 【Java多线程案例】实现阻塞队列
  • Vue3快速上手(一)使用vite创建项目
  • 滑块验证码识别代码分享
  • 力扣236——二叉树的最近公共祖先