Vue2 第十九节 Vuex (一)

news2024/11/14 15:19:32

1.理解Vuex

2.Vuex工作原理

3.求和案例

4.Vuex的开发者工具

一.理解Vuex

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

② 为了解决数据共享问题

 ③ 什么时候使用Vuex

(1)多个组件依赖同一状态

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

二.Vuex工作原理

2.1 Vuex工作原理

① State:Vue管理的状态对象,它应该是唯一的,相当于数据

② dispatch:在组件中使用 $store.dispatch('对应的action回调名') 触发

③ Actions:值为一个对象,包含多个响应用户动作的回调函数,与服务器进行交互的地方

④ 通过 $store.commit()来触发mutations中函数的调用,间接更新state

⑤ mutations:值为一个对象,包含多个直接更新state的方法

⑥ 组件可以直接调用 $store.commit

⑦ DevTools: 开发者工具

⑧ actions state mutation对象需要一个store管理

2.2 搭建Vuex环境

① 安装:npm i vuex@3

② 引入:import Vuex from 'vuex'

③ 使用:Vue.use(Vuex)

④ 构建环境

(1)新建store文件夹和index.js 

(2) index.js

// 该文件用于创建Vuex中最为核心的store
// 准备actions -- 用于响应组件中的动作
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const actions = {

}

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

}

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

}
// 创建store
export default new Vuex.Store({
  actions,
  mutations,
  state
})

(3) main.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'
Vue.config.productionTip = false
new Vue({
    el: '#app',
    render: q => q(App),
    store
})

(4) 得到 $store

三. 求和案例

 3.1 使用纯Vue实现

  App.vue

<template>
  <div>
    <Count />
  </div>
</template>

<script>
import Count from './components/Count.vue'
export default {
  name: 'App',
  components: { Count }
}
// 如果本地存在就会直接从本地拿,不会去请求代理服务器
</script>
<style>
</style>

Count.vue

<template>
  <div>
    <h1>当前求和为{{ 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, // 用户选择的数字
      sum: 0 // 当前的和
    }
  },
  methods: {
    increment () {
      this.sum += this.n
    },
    decrement () {
      this.sum -= this.n
    },
    incrementOdd () {
      if (this.sum % 2) {
        this.sum += this.n
      }
    },
    incrementWait () {
      setTimeout(() => {
        this.sum += this.n
      }, 500)
    }
  }
}
</script>

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

界面展示:

3.2 使用Vuex实现

① dispatch调用

② 去actions中实现这个add函数

③ 在mutations中添加ADD函数 

第一个参数是state数据,第二个是传的参数

④ 在模板中使用

⑤ 所有功能实现:

(1)main.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'
Vue.config.productionTip = false
new Vue({
    el: '#app',
    render: q => q(App),
    store
})

(2) index.js

// 该文件用于创建Vuex中最为核心的store
// 准备actions -- 用于响应组件中的动作
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const actions = {
  // add (context, value) {
  //   context.commit('ADD', value)
  // },
  // reduce (context, value) {
  //   context.commit('REDUCE', value)
  // },
  addOdd (context, value) {
    if (context.state.sum % 2) {
      context.commit('ADD', value)
    }
  },
  addWait (context, value) {
    setTimeout(() => {
      context.commit('ADD', value)
    }, 500)
  }
}

// 准备 mutations --用于操作数据(state)
const mutations = {
  ADD (state, value) {
    state.sum += value
  },
  REDUCE (state, value) {
    state.sum -= value
  }
}

// 准备state --用于存储数据
const state = {
  sum: 0
}
// 创建store
export default new Vuex.Store({
  actions,
  mutations,
  state
})

 (3) App.vue

<template>
  <div>
    <Count />
  </div>
</template>

<script>
import Count from './components/Count.vue'
export default {
  name: 'App',
  components: { Count },
  mounted () {
    console.log('App', this)
  },
}
// 如果本地存在就会直接从本地拿,不会去请求代理服务器
</script>
<style>
</style>

(4) 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, // 用户选择的数字
      sum: 0 // 当前的和
    }
  },
  methods: {
    increment () {
      // this.$store.dispatch('add', this.n)
      // 可以直接调用commit
      this.$store.commit('ADD', this.n)
    },
    decrement () {
      // this.$store.dispatch('reduce', this.n)
      this.$store.commit('REDUCE', this.n)
    },
    incrementOdd () {
      this.$store.dispatch('addOdd', this.n)
    },
    incrementWait () {
      this.$store.dispatch('addWait', this.n)
    }
  }
}
</script>

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

四. Vuex开发者工具

(1) 第二个标签就是Vuex

 (2) 基本数据

(3)点击之后,收集的是 mutation中的数据

(4) 穿梭到这一条数据

 (5) 删除这条数据(依赖这条数据的都会被删除)

 (6)合并之前的结果到 Base State 中

 

 (7) 记录按钮:红色就是在记录着,点击之后变成灰色,灰色的话开发者工具就不捕获用户操作和数据

 (8) 将本次执行的结果全部删除

(9) 将所有结果合并

(10)将执行的结果导出和导入

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

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

相关文章

Linux常用命令——dpkg命令

在线Linux命令查询工具 dpkg Debian Linux系统上安装、创建和管理软件包 补充说明 dpkg命令是Debian Linux系统用来安装、创建和管理软件包的实用工具。 语法 dpkg(选项)(参数)选项 -i&#xff1a;安装软件包&#xff1b; -r&#xff1a;删除软件包&#xff1b; -P&…

10倍提升效率,号称取代Elasticsearch?

[Manticore Search](https://github.com/manticoresoftware/manticoresearch/) 是一个使用 C 开发的高性能搜索引擎&#xff0c;创建于 2017 年&#xff0c;其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx&#xff0c;显着改进了它的功能&#xff0c;修复了数百…

ubuntu20.04驱动降级(从535降到525)

今天又重装系统了&#xff0c;这是一个悲伤的故事。 但更为悲伤的是装完系统之后无法在“软件和更新”的“附加驱动”去获得“专有驱动”&#xff0c;也就是本来可以直接从界面装nvidia-driver-525&#xff08;专有&#xff09;的选项不可用了&#xff08;都快把屏幕点烂了都没…

Grafana集成prometheus(4.Grafana添加预警)

上文已经完成了grafana对prometheus的集成及数据导入&#xff0c;本文主要记录grafana的预警功能&#xff08;以内存为例&#xff09; 添加预警 添加入口&#xff08;2个&#xff09; databorard面板点击edit&#xff0c;下方有个Alert的tab&#xff0c;创建Alert rules依赖…

基于vue+uniapp+nodejs微信小程序中小学数学学习辅导系统

本系统分为用户和管理员两个角色&#xff0c;其中用户可以登陆系统&#xff0c;查看数学课程分类&#xff0c;系统公告&#xff0c;课程详情&#xff0c;播放课程&#xff0c;在线口算练习&#xff1b;管理员对用户信息&#xff0c;学习课程&#xff0c;知识分类&#xff0c;学…

npm 错误,ERESOLVE unable to resolve dependency tree

ERESOLVE unable to resolve dependency tree 1.解决方法一&#xff1a;2.解决方式二 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c…

树结构数据没有更新 重新加载

问题: 点击编辑按钮到编辑页面选择机构名称&#xff0c;然后返回列表页&#xff0c;点击新增按钮 树结构数据没有重新加载&#xff0c;显示的是上一次勾选项。 解决办法&#xff1a;在编辑页面关闭前请求接口重新获取树结构数据。 用到的知识点是&#xff1a;父组件调用子组件方…

Docker实战-操作Docker容器实战(二)

导语   上篇分享中,我们介绍了关于如何创建容器、如何启动容器、如何停止容器。这篇我们来分享一下如何操作容器。 如何进入容器 可以通过使用-d参数启动容器后会进入后台运行,用户无法查看容器中的信息,无法对容器中的信息进行操作。 这个时候如果我们需要进入容器对容器…

如何发布自己的npm包

发布一个简单的npm包 首先创建一个文件夹&#xff08;唯一的命名&#xff09;创建package.json包&#xff0c;输出npm init&#xff0c;一直回车就好。创建index.js文件&#xff0c;向外暴露方法。 将包上传或更新到 npm 执行登录命令&#xff1a;npm login 登录npm官网&…

uniapp-疫情应急管理系统学生端

1 疫情资讯展示 <template><view class"container"><uni-section title"自定义卡片内容" type"line"><uni-card title"基础卡片" class"card-box" v-for"(item,index) in epidemicNewsList"…

RabbitMQ安装说明文档-v2.0

rabbitmq安装 说明&#xff1a;请使用资料里提供的CentOS-7-x86_64-DVD-1810.iso 安装虚拟机. 1. 安装依赖环境 在线安装依赖环境&#xff1a; yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel …

企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势 tbms

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

我理解的音响设备音频放大器地线环路共地回路造成交流声干扰哼声的分析,信号接地,工业仪表接地的问题

我理解的音响设备音频放大器地线环路共地回路造成交流声干扰哼声的分析&#xff0c;信号接地&#xff0c;工业仪表接地的问题 wxleasyland 2023.8 一、地线环路造成交流声哼声 家里插座中有一个的PE地线&#xff0c;相当于大地。 设备1的“信号地”接到家里三脚插座的PE地线…

I.MX6ULL_Linux_驱动篇(43)linux通用LED驱动

前面我们都是自己编写 LED 灯驱动&#xff0c;其实像 LED 灯这样非常基础的设备驱动&#xff0c; Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 platform 框架&#xff0c;因此我们只需要按照要求在设备树文件中添加相应的 LED 节点即可&#xff0c;本章我们就来学习如…

【Linux命令200例】scp用于在本地主机和远程主机之间进行文件传输

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f3c6;本文已…

用html+javascript打造公文一键排版系统13:增加半角标点符号和全角标点符号的相互转换

一、实践发现了bug和不足 今天用了公文一键排版系统对几个PDF文件格式的材料进行文字识别后再重新排版&#xff0c;处理效果还是相当不错的&#xff0c;节约了不少的时间。 但是也发现了三个需要改进的地方&#xff1a; &#xff08;一&#xff09;发现了两个bug&#xff1a…

大模型时代来临----算法工程师与相关职业如何发展与提升

前言&#xff1a;7月28日&#xff0c; 合合信息举办了一场关于大模型时代下算法工程师发展和转型的直播。作为一家持续站在技术前沿的企业&#xff0c;合合信息探讨了算法工程师在不同阶段的发展、差异点和共性&#xff0c;以及他们转型为算法周边工作所需的能力。同时&#xf…

什么软件可以让试卷变空白?分享个擦除答案的方法

在学习过程中&#xff0c;我们常常需要进行考试来检验自己的学习成果。但是&#xff0c;有些情况下我们可能需要重新测试&#xff0c;这时候就需要把试卷变成空白来擦除答案。那么&#xff0c;有哪些方法可以帮助我们实现这一需求呢&#xff1f;下面我们就一起来看看吧。 PS是一…

GP一个节点挂了,gpadmin用户免密失效导致

1、有个节点挂了&#xff0c;参考链接 https://www.cnblogs.com/xibuhaohao/p/11418113.html 执行第四步 gprecoverseg -i ./recov 恢复的时候报错&#xff0c;报 ssh 不到segment的节点。 2、试了下root账号 ssh 到segment节点没有问题&#xff0c;但gpadmin用户不行&…

VS code 用户设置

ctrlshiftP打开用户设设置 vscode user setting.json 中的配置 {// vscode默认启用了根据文件类型自动设置tabsize的选项"editor.detectIndentation": false,//黄色波浪线"eslint.enable": false,// 重新设定tabsize"editor.tabSize": 2,&quo…