Vuex -mutations 传参修改仓库数据

文章目录

  • mutations 修改仓库数据
    • 一、mutations的基本修改
    • 二、mutations 传参修改数据
          • 1、 在触发事件的时候传递参数
          • 2、 提供事件方法,接收使用参数
          • 3、mutations方法接受使用参数
          • 传递参数注意事项:
    • 三、综合代码(练习、复习)
          • store文件夹中的index.js文件代码
          • App.vue 组件代码:
          • Son1.vue 组件代码
          • Son2.vue 组件代码

mutations 修改仓库数据

  • 我们的vuex是单项数据流,组件内不能直接更改仓库的数据。(需要申请)

通过 strict: true 开启严格模式(提示错误的修改仓库的数据)

一、mutations的基本修改

  1. 组件想要修改仓库数据,必须得使用mutations方法
  // 1.通过 mutations提供可以修改仓库数据的方法,里面方法的第一个参数是storemutations: {addCount (store) {store.count += 1},addFive (store) {store.count += 5},changeTitle (store) {store.title = '小标题'}
  1. 修改数据,向仓库中的mutations申请调用里面封装的方法
2、事件触发调用对应的方法methods: {handleAdd () {this.$store.commit('addCount')},handleAddFive () {this.$store.commit('addFive')},handleFn () {this.$store.commit('changeTitle')}}

二、mutations 传参修改数据

由于上面的每一次改变数据都得提供一个方法,这样太繁琐,没必要

  • 我们可以直接使用传参(提交载荷)的方式进行高效的处理
1、 在触发事件的时候传递参数
    <button @click="handleAdd(1)">+ 1</button><button @click="handleAdd(5)">+ 5</button><button @click="handleAdd(10)">+ 10</button>
2、 提供事件方法,接收使用参数
  methods: {handleAdd (n) {this.$store.commit('addCount', n)},
3、mutations方法接受使用参数
  mutations: {addCount (store, number) {store.count += number},
传递参数注意事项:

mutations有且仅有一个参数,如果需要传递多个参数,必须得传递对象 过去,同样的那边也得使用对象的形式处理数据。

组件传递参数:

  methods: {handleAdd (n) {this.$store.commit('addCount', {// 注意: 需要传递多个参数,得使用对象的方式count: n,msg: '哈哈'})

仓库修改数据:

  mutations: {// 同样的,组件传递对象过来,这里也是用对象接收使用addCount (store, obj) {store.count += obj.countalert(obj.msg)},

三、综合代码(练习、复习)

store文件夹中的index.js文件代码
// 这里面存放的是 vuex 相关的核心代码
import Vue from 'vue'
import Vuex from 'vuex'//  1、插件安装(注册)
Vue.use(Vuex)// 2、创建仓库(空的) (和路由不一样的就是 需要在的是Veux构造函数上面的Store构造函数)
const store = new Vuex.Store({// 开启严格模式(上线需要关闭)strict: true,// 1.通过state 可以提供 仓库 数据 (所有组件共享的数据)state: {title: '仓库大标题',count: 100},// 2.通过 mutations提供可以修改仓库数据的方法mutations: {// 同样的,组件传递对象过来,这里也是用对象接收使用// Son1组件 添加addCount (store, obj) {store.count += obj.countalert(obj.msg)},// Son1组件 按钮改标题changeTitle (store, newTitle) {store.title = newTitle},// Son2组件 删除delCount (store, obj) {store.count -= obj.countalert(obj.msg)},// Son2组件 按钮修改标题changeTitle2 (store, newTitle2) {store.title = newTitle2},// App.vue组件通过输入框修改 count 值countChange (store, changeCount) {store.count = changeCount}}
})// 3、导出给 main.js 使用
export default store
App.vue 组件代码:
<template><div id="app"><h1>根组件- {{ title }}- {{ count }}</h1><input class="input" :value="count" @input="inputChange" type="text"><Son1></Son1><hr><Son2></Son2></div>
</template><script>
import Son1 from './components/Son1.vue'
import Son2 from './components/Son2.vue'
// 将仓库里面的数据导入过来,下面通过 computed 配置 结构 mapState (方便组件直接使用)
import { mapState } from 'vuex'export default {name: 'app',data () {return {}},// 输入框触发回车事件,修改 发起申请,将仓库里面的 count 的值改掉methods: {inputChange (e) {this.$store.commit('countChange', +e.target.value)// 输入后2秒后自动清空输入框setTimeout(() => {document.querySelector('.input').value = ''}, 2000)}},created () {// console.log(this.$router)   没配undefinedconsole.log(this.$store)console.log(this.$store.state.count)},computed: {...mapState(['count', 'title'])},components: {Son1,Son2}
}
</script>
Son1.vue 组件代码
<template><div class="box"><h2>Son1 子组件</h2>从vuex中获取的值: <label>{{ count }}</label><br /><button @click="handleAdd(1)">+ 1</button><button @click="handleAdd(5)">+ 5</button><button @click="handleAdd(10)">+ 10</button><button @click="handleFn()">修改标题</button></div>
</template><script>
import { mapState } from 'vuex'
export default {name: 'Son1Com',computed: {...mapState(['count', 'title'])},// 修改数据,向仓库中的mutations申请调用里面封装的方法methods: {// 向仓库发起申请(调用mutations里面的 addCound方法)  添加handleAdd (n) {this.$store.commit('addCount', {// 注意: 需要传递多个参数,得使用对象的方式count: n,msg: '你确定要添加吗'})},// 向仓库发起申请,(调用mutations里面的 changeTitle方法)  修改标题handleFn () {this.$store.commit('changeTitle', 'vuex')}}
}
</script>
Son2.vue 组件代码
<template><div class="box"><h2>Son2 子组件</h2>从vuex中获取的值:<label>{{ count }}</label><br /><button @click="handleAdd(1)">- 1</button><button @click="handleAdd(5)">- 5</button><button @click="handleAdd(10)">- 10</button><button @click="handleFn">修改标题</button></div>
</template><script>
// 先导入辅助函数
import { mapState } from 'vuex'export default {name: 'Son2Com',computed: {...mapState(['count'])},methods: {handleAdd (n) {// 向仓库申请 (调用mutations 里面的 delCount方法) 删除this.$store.commit('delCount', {count: n,msg: '你确定要删除吗'})},handleFn () {// 向仓库申请 (调用 mutations 里面的 changetitle2方法) 修改标题this.$store.commit('changeTitle2', 'vuex2')}}
}
</script>

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

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

相关文章

一篇文章教会你什么是高度平衡二叉搜索(AVL)树

高度平衡二叉搜索树 AVL树的概念1.操作2.删除3.搜索4.实现描述 AVL树的实现1.AVL树节点的定义2.AVL树的插入3.AVL树的旋转3.1 新节点插入较高右子树的右侧---右右:左单旋3.2 新节点插入较高左子树的左侧---左左:右单旋3.3 新节点插入较高左子树的右侧---左右&#xff1a;先左单…

尖端AR技术如何在美国革新外科手术实践?

AR智能眼镜已成为一种革新性的工具&#xff0c;在外科领域具有无穷的优势和无限的机遇。Vuzix与众多医疗创新企业建立了长期合作关系&#xff0c;如Pixee Medical、Medacta、Ohana One、Rods & Cones、Proximie等。这些公司一致认为Vuzix智能眼镜可有效提升手术实践&#x…

计算机网络的故事——了解Web及网络基础

了解Web及网络基础 文章目录 了解Web及网络基础一、使用 HTTP 协议访问 Web二、HTTP 的诞生三、网络基础 TCP/IP四、与 HTTP 关系密切的协议 : IP、TCP 和 DNS 一、使用 HTTP 协议访问 Web 根据Web浏览器指定的URL&#xff0c;从对应的服务器中获取文件资源&#xff0c;从而显…

Java压缩文件为ZIP并加密

当您需要将文件加密并保存为ZIP文件时&#xff0c;可以使用net.lingala.zip4j库来实现。 步骤1&#xff1a;准备工作 首先&#xff0c;确保您已经包含了net.lingala.zip4j库&#xff0c;并将其添加到您的Java项目中。您可以通过Maven或Gradle等构建工具来添加这个库。仓库地址…

深度学习-4-二维目标检测-YOLOv5理论模型详解

YOLOv5理论模型详解 1.Yolov5四种网络模型 Yolov5官方代码中&#xff0c;给出的目标检测网络中一共有4个版本&#xff0c;分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。 YOLOv5系列的四个模型&#xff08;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff09;在参数量和性…

手写Ribbon基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明什么是RibbonRibbon和Nginx负载均衡的区别 工作流程代码实现RibbonSDK发送请求端引入RibbonSDK和Nacos的依赖配置文件中填写负载均衡策略调用代码 接收请求端执行效果发送请求端接收请求端 总结提升 概念说明 什么是Ribbon Ribb…

序列号读取

1.序列号读取 1.1 应用示例目的与思路 获取光盘的外接圆&#xff1b;然后进行极坐标变换&#xff0c;获取字符所在的区域&#xff1b;最后进行字符分割、识别及其在原图上显示。 1.2 应用示例相关算子介绍 (1) mean_image(Image : ImageMean : MaskWidth, MaskHeight : ) …

19 | spark 统计 每列的数据非缺失值

计算CSV文件中每列的数据覆盖率(非缺失值的百分比)时,您可以使用提供的Java代码来完成这项任务。以下是更详细的步骤: 1. 导入所需库和设置Spark配置 首先,您需要导入所需的Java库,并设置Spark的配置。这些库包括Apache Spark的Java库以及用于数据处理和格式化的其他Ja…

SQL语法

通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数…

uniapp 手机 真机测试 ​ 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可​

uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 &#xff08;启动开发者模式&#xff09; 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四&#xff0c; 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可

每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题

食用指南&#xff1a;本文为作者刷题中认为有必要记录的题目 前置知识&#xff1a;回溯法经典问题之全排列 ♈️今日夜电波&#xff1a;带我去找夜生活—告五人 0:49 ━━━━━━️&#x1f49f;──────── 4:59 …

2023国赛数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

Vue3笔记

setup Vue3.0中一个新的配置项&#xff0c;值为一个函数。组件中所用到的&#xff1a;数据、方法等等&#xff0c;均要配置在setup中。setup函数的两种返回值&#xff1a; 若返回一个对象&#xff0c;则对象中的属性、方法&#xff0c;在模板中均可以直接使用。&#xff08;重…

QUIC协议科普导入(一)

一&#xff1a;QUIC协议导入 QUIC是一个通用的传输层网络协议&#xff0c;最初由Google的Jim Roskind设计&#xff0c;2012年实现并部署&#xff0c;2013年随着实验范围的扩大而公开发布&#xff0c;并向IETF描述。虽然长期处于互联网草案阶段&#xff0c;但在从Chrome浏览器到…

软件层面缓存基本概念与分类

缓存 缓存基本概念&#xff08;百度百科&#xff09; 缓存&#xff08;cache&#xff09;&#xff0c;原始意义是指访问速度比一般随机存取存储器&#xff08;RAM&#xff09;快的一种高速存储器&#xff0c;通常它不像系统主存那样使用DRAM技术&#xff0c;而使用昂贵但较快…

vue3中通过ref获取子组件实例,取值为undefined

也就是Vue3如何通过 ref 获取子组件实例(子组件中的DOM结构、数据、及方法)&#xff0c;今天写index.vue(父组件&#xff09;时想获取子组件的数据和方法&#xff0c;通过给子组件绑定ref&#xff0c;打印子组件的数据为undefined&#xff1b;百度搜索常用方法为&#xff1a; …

【C++】继承基础知识一遍过

目录 一&#xff0c;概念 二&#xff0c;继承定义 1. 继承格式 2. 访问限定符与继承方式的关系 3. 继承父类成员访问方式的变化 小结&#xff1a; 三. 父类与子类对象赋值转化 四&#xff0c;继承作用域 1.特点 2. 测试题 五&#xff0c;派生类不一样的默认成员函…

基于深度学习的三维重建从入门实战教程 原理讲解 源码解析 实操教程课件下载

传统的重建方法是使用光度一致性等来计算稠密的三维信息。虽然这些方法在理想的Lambertian场景下,精度已经很高。 但传统的局限性,例如弱纹理,高反光和重复纹理等,使得重建困难或重建的结果不完整。 基于学习的方法可以引入比如镜面先验和反射先验等全局语义信息,使匹配…

Ribbon负载均衡+Nacos服务搭建

Ribbon负载均衡 流程 首先通过RibbonLoadBalanceerClient获取服务名&#xff0c;并传给DynamicServerListLoadBalancer——>通过EureKa-server获取服务名对应服务列表(也就是被注册到EureKa中的服务&#xff0c;可能包括不同端口的)&#xff0c;然后我们会根据IRule中的服务…

【python自动化】playwright长截图切换标签页JS注入实战

前言 当前教程使用的playwright版本为1.37.0,selenium版本为3.141.0 官方文档&#xff1a;https://playwright.dev/python/docs/screenshots 本教程目录如下 文章目录 前言playwright各类截图源码阅读ElementHandle类下的截图Page类下的截图Locator类下的截图 Playwright快速…