前端基础之vuex

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

什么时候使用vuex?
1.多组件依赖同一状态

2.来自不同组件的行为需要变更同一状态

Vuex结构图

在Actions中实现ajax请求发送或是需要进行一些加工逻辑处理,就可以在Actions中进行

基本配置

1.首先需要下载npm i jax

2.在src目录下创建一个store文件夹,创建一个index.js文件

// 该文件用于创建store

//引入Vuex

import Vuex from 'vuex'

//引入vue

import Vue from 'vue'

Vue.use(Vuex)

//准备actions——用于响应组件中动作

const actions={

   

}

//准备mutations——用于操作数据

const mutations={}

//准备state——用于存储数据

const state={

    sum:0,

}

//创建并且暴露store

export default new Vuex.Store({

    actions,

    mutations,

    state

})

3.在main.js中引入store.js,并使用

import Vue from 'vue'

import App from './App.vue'

import store from './store/index'

Vue.config.productionTip = false

Vue.use(store)

const vm= new Vue({

  render: h => h(App),

  beforeCreate(){

    Vue.prototype.$bus=this

  },

  store

}).$mount('#app')

console.log(vm)

实际使用

在Count.vue中

<template>

  <div>

    <h1>当前求和为{{$store.state.sum}}</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="decrement">-</button>

    <button @click="incrementOdd">当前求和为奇数再加:</button>

    <button @click="incrementWait">等一等再加</button>

  </div>

</template>

<script>

export default {

    name:'Count',

    data(){

        return{

         

            n:1,//用户选择

        }

    },

    methods:{

        increment(){           //我们可以直接使用Commit去调用Mutations中的方法,去绕过不需要业务逻辑处理的Actions

            this.$store.commit('JIA',this.n)

        },

        decrement(){

            this.$store.commit('JIAN',this.n)

        },

        incrementOdd(){

                this.$store.dispatch('jianOdd',this.n)

        },

        incrementWait(){

                this.$store.dispatch('jianWait',this.n)

        }

    },

   

}

</script>

<style scoped>

button{

    margin-left: 5px;

}

</style>

在store文件夹下的index.js中

// 该文件用于创建store

//引入Vuex

import Vuex from 'vuex'

//引入vue

import Vue from 'vue'

Vue.use(Vuex)

//准备actions——用于响应组件中动作

const actions={

    jianOdd(context,value){

        if(context.state.sum%2){

         context.commit('JIA',value)

        }

     

    },

    jianWait(context,value){

       setTimeout(()=>{

        context.commit('JIA',value)

       },500)

    },

}

//准备mutations——用于操作数据

const mutations={

    JIA(state,value){

      state.sum+=value

    },

    JIAN(state,value){

        state.sum-=value

    }

}

//准备state——用于存储数据

const state={

    sum:0,

}

//创建并且暴露store

export default new Vuex.Store({

    actions,

    mutations,

    state

})

getters配置项

如果我们需要对vuex中的数据进行一个复杂的逻辑计算,就可以配置一个getters配置项,这个配置项类似于之前的computed,配置完毕之后还需要将其进行暴露

// 该文件用于创建store

//引入Vuex

import Vuex from 'vuex'

//引入vue

import Vue from 'vue'

Vue.use(Vuex)

//准备actions——用于响应组件中动作

const actions={

    jianOdd(context,value){

        if(context.state.sum%2){

         context.commit('JIA',value)

        }

     

    },

    jianWait(context,value){

       setTimeout(()=>{

        context.commit('JIA',value)

       },500)

    },

}

//准备mutations——用于操作数据

const mutations={

    JIA(state,value){

      state.sum+=value

    },

    JIAN(state,value){

        state.sum-=value

    }

}

//准备state——用于存储数据

const state={

    sum:1,

}

//准备getters——用于将state中的数据进行加工

const getters={

    bigSum(state){

        return state.sum*10

    }

}

//创建并且暴露store

export default new Vuex.Store({

    actions,

    mutations,

    state,

    getters

})

在需要使用的地方使用$store.getters.bigSum进行引用

<template>

  <div>

    <h1>当前求和为{{$store.state.sum}}</h1>

    <h1>当前求和放大十倍为{{$store.getters.bigSum}}</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="decrement">-</button>

    <button @click="incrementOdd">当前求和为奇数再加:</button>

    <button @click="incrementWait">等一等再加</button>

  </div>

</template>

<script>

export default {

    name:'Count',

    data(){

        return{

         

            n:1,//用户选择

        }

    },

    methods:{

        increment(){           //我们可以直接使用Commit去调用Mutations中的方法,去绕过不需要业务逻辑处理的Actions

            this.$store.commit('JIA',this.n)

        },

        decrement(){

            this.$store.commit('JIAN',this.n)

        },

        incrementOdd(){

                this.$store.dispatch('jianOdd',this.n)

        },

        incrementWait(){

                this.$store.dispatch('jianWait',this.n)

        }

    },

   

}

</script>

<style scoped>

button{

    margin-left: 5px;

}

</style>

MapState与MapGetter

我们可以通过使用计算数据computer,来达到简写{{}}里面数值的作用

但是我们可以直接使用mapState与mapGetters来帮助我们生成代码

<template>

  <div>

    <h1>当前求和为{{sum}}</h1>

    <h1>当前求和放大十倍为{{bigSum}}</h1>

    <h1>我在{{school}},学习{{subject}}</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="decrement">-</button>

    <button @click="incrementOdd">当前求和为奇数再加:</button>

    <button @click="incrementWait">等一等再加</button>

  </div>

</template>

<script>

import { mapState, mapGetters} from 'vuex';

export default {

    name:'Count',

    data(){

        return{

         

            n:1,//用户选择

        }

    },

    methods:{

        increment(){           //我们可以直接使用Commit去调用Mutations中的方法,去绕过不需要业务逻辑处理的Actions

            this.$store.commit('JIA',this.n)

        },

        decrement(){

            this.$store.commit('JIAN',this.n)

        },

        incrementOdd(){

                this.$store.dispatch('jianOdd',this.n)

        },

        incrementWait(){

                this.$store.dispatch('jianWait',this.n)

        }

    },

    computed:{

        //借助mapState生成计算属性——对象写法,keyvalue不要求统一

       // ...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),

        //借助mapState生成计算属性——数组写法,keyvalue要求统一,并且可以简写

        ...mapState(['sum','school','subject']),

        /* ============================================== */

        //借助mapGetters生成计算属性——数组写法,keyvalue要求统一,并且可以简写

        ...mapGetters(['bigSum'])

    }

}

</script>

<style scoped>

button{

    margin-left: 5px;

}

</style>

也就是说,如果我们需要获取vuex中管理的数据,可以使用mapState来实现,如果该数据需要进行数据操作,可以使用mapGetters来实现

MapMutations与MapActions

如果我们需要去执行vuex中的Mutations与MapActions方法,可以使用MapMutations与MapActions来实现

<template>

  <div>

    <h1>当前求和为{{sum}}</h1>

    <h1>当前求和放大十倍为{{bigSum}}</h1>

    <h1>我在{{school}},学习{{subject}}</h1>

    <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="incrementOdd(n)">当前求和为奇数再加:</button>

    <button @click="incrementWait(n)">等一等再加</button>

  </div>

</template>

<script>

import { mapState, mapGetters,mapMutations,mapActions} from 'vuex';

export default {

    name:'Count',

    data(){

        return{

         

            n:1,//用户选择

        }

    },

    computed:{

        //借助mapState生成计算属性——对象写法,keyvalue不要求统一

       // ...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),

        //借助mapState生成计算属性——数组写法,keyvalue要求统一,并且可以简写

        ...mapState(['sum','school','subject']),

        /* ============================================== */

        //借助mapGetters生成计算属性——数组写法,keyvalue要求统一,并且可以简写

        ...mapGetters(['bigSum'])

    },

    methods:{

       

        // incrementOdd(){

        //         this.$store.dispatch('jianOdd',this.n)

        // },

        // incrementWait(){

        //         this.$store.dispatch('jianWait',this.n)

        // },

        ...mapActions({incrementOdd:'jianOdd',incrementWait:'jianWait'}),

        /* 亲自写方法 */

        // increment(){           //我们可以直接使用Commit去调用Mutations中的方法,去绕过不需要业务逻辑处理的Actions

        //     this.$store.commit('JIA',this.n)

        // },

        // decrement(){

        //     this.$store.commit('JIAN',this.n)

        // },

        //借助mapMutations调用Commit去访问Mutations——对象写法

       // ...mapMutations({increment:'JIA',decrement:'JIAN'}),

         //借助mapMutations调用Commit去访问Mutations——数组写法

         ...mapMutations(['JIA','JIAN'])

    }

}

</script>

<style scoped>

button{

    margin-left: 5px;

}

</style>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的&#xff1a; 1.引入 required 模块&#xff1a;我们可以使用 requi…

Python学习(十四)pandas库入门手册

目录 一、安装与导入二、核心数据结构2.1 Series 类型&#xff08;一维数组&#xff09;2.2 DataFrame 类型&#xff08;二维数组&#xff09; 三、数据读取与写入3.1 读取 CSV 和 Excel 文件3.2 写入数据 四、数据清洗与处理4.1 处理缺失值4.2 数据筛选4.3 数据排序 五、数据分…

2025东方财富笔试考什么?cata能力测评攻略|答题技巧真题分享

嘿&#xff0c;各位怀揣金融梦想、准备在 2025 年求职浪潮中大展身手的小伙伴们&#xff01; 我是职小豚&#xff0c;在求职指导领域摸爬滚打了 10 年&#xff0c;每年都见证着无数求职者为心仪的岗位全力以赴。 一、东方财富&#xff1a;金融科技界的“数据狂魔” 东方财富&…

Ollama+AnythingLLM安装

一、文件准备 ‌ 1. 安装包获取‌ 从联网设备下载&#xff1a; AnythingLLMDesktopInstaller.exe&#xff08;官网离线安装包&#xff09;‌ deepseek-r1-1.5b.gguf&#xff08;1.5B 参数模型文件&#xff09;‌ 2. ‌传输介质‌ 使用 U 盘或移动硬盘拷贝以下文件至离线设…

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…

Storm实时流式计算系统(全解)——下

storm编程案例-网站访问来源实时统计-需求 storm编程-网站访问来源实时统计-代码实现 根据以上条件可以只写一个类&#xff0c;我们只需要写2个方法和一个main&#xff08;&#xff09;&#xff0c;一个读取/发射&#xff08;spout&#xff09;。 一个拿到数据统计后发到redis…

【0010】Python流程控制结构-分支结构详解

如果你觉得我的文章写的不错&#xff0c;请关注我哟&#xff0c;请点赞、评论&#xff0c;收藏此文章&#xff0c;谢谢&#xff01; 本文内容体系结构如下&#xff1a; 分支结构是编程中的基本控制结构之一&#xff0c;它允许程序根据条件判断执行不同的代码路径。通过本文&…

个推助力小米米家全场景智能生活体验再升级

当AI如同水电煤一般融入日常&#xff0c;万物互联的图景正从想象照进现实。作为智能家居领域的领跑者&#xff0c;小米米家凭借开放的生态战略&#xff0c;已连接了超8.6亿台设备&#xff0c;构建起全球领先的消费级AIoT平台。如今&#xff0c;小米米家携手个推&#xff0c;通过…

鸿蒙启动页开发

鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件&#xff0c;找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…

上海市闵行区数据局调研云轴科技ZStack,共探数智化转型新路径

为进一步深化人工智能、大模型技术的应用&#xff0c;推动区域数字经济高质量发展&#xff0c;2025年2月27日&#xff0c;上海市闵行区数据局局长吴畯率队赴上海云轴科技股份有限公司&#xff08;以下简称“云轴科技ZStack”&#xff09;开展专题调研。此次调研旨在深入了解企业…

idea实现热部署

1.在pom.xml文件添加依赖 java <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency> 更新可见配置成功&#xff1a; 2.在appli…

61. Three.js案例-彩色旋转立方体创建与材质应用

61. Three.js案例-彩色旋转立方体创建与材质应用 实现效果 知识点 WebGLRenderer(WebGL渲染器) 构造器 WebGLRenderer( parameters : Object ) 参数类型描述antialiasBoolean是否执行抗锯齿(默认false)alphaBoolean是否包含alpha通道(默认false)方法 setSize( width…

使用JMeter(组件详细介绍+使用方式及步骤)

JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…

tomcat的安装与配置(包含在idea中配置tomcat)

Tomcat 是由 Apache 软件基金会开发的开源 Java Web 应用服务器&#xff0c;主要用于运行 Servlet 和 JSP&#xff08;JavaServer Pages&#xff09;程序。它属于轻量级应用服务器&#xff0c;适用于中小型系统及开发调试场景&#xff0c;尤其在处理动态内容&#xff08;如 Jav…

快速开始React开发(一)

快速开始React开发&#xff08;一&#xff09; React是一个JavaScript库&#xff0c;用于构建交互式网站&#xff0c;并且能够快捷创建SPA&#xff08;Single Page App&#xff09;&#xff0c;其组件化的思想也是被一再传播&#xff0c;无论是普通的Web网站还是嵌入移动端交互…

安装nvidia-docker 和设置docker 镜像源

Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 可以先参考官方文档 下面的操作具体和官方文档类似 curl -fsSL https://mirrors.ustc.edu.cn/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-ke…

C++第二节:C/C++内存管理

1.C/C内存分布 【说明】 栈又叫堆栈--非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。内存映射段是高效的I/O映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存&#xff0c;做进程间通信。堆用于程序运行时动态内存分…

rust编程实战:实现3d粒子渲染wasm

源码 纯js实现 fps&#xff1a; wasm实现 通过对比可以看出来 wasm 实现的计算比纯js刷新相对稳定。

开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享

OpenHarmony 5.0版本的发布时间是2024年12月20日至21日。这个版本带来了许多新特性和改进。现在5.0出了两个release 版本&#xff0c;分别是5.0.0和5.0.1。 就在5.0版本发布不到2周的时间内&#xff0c;2025年01月01日起&#xff0c;不支持新产品基于老分支&#xff08;OpenHar…

deepseek在pycharm 中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…