Vue2 第十九节 Vuex (一)

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)// 可以直接调用committhis.$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.hqwc.cn/news/55304.html

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

相关文章

JMeter(二十四)、使用吞吐量控制器实现不同的用户操纵不同的业务

一、需求 需求&#xff1a;博客系统&#xff0c;模拟用户真实行为&#xff0c;80%的用户阅读文章&#xff0c;20%的用户创建文章&#xff0c;创建文章的用户随机的删除或者修改文章。 二、脚本实现 80%的用户查看文章 20%用户创建文章 根据post_id是否能整除2&#xff0c;决…

Lua 使用 —— IO 操作

一、前言 Lua 语言是以一个脚本存在&#xff0c;所以他自身不会提供太多和外部交互的机制。需要交互则由宿主提供或是由外部库。 接下来分享下如何使用以 iso c 作为宿主&#xff0c;进行标准库的 io 操作。 二、io.input、io.output 1、io.input io.input(filename) 会以…

【windows】windows上如何使用linux命令?

前言 windows上的bat命令感觉不方便&#xff0c;想在windows上使用linux命令。 有人提供了轮子&#xff0c;本文简单介绍一些该轮子的安装与使用&#xff0c;希望能够帮助到和我有一起需求的网友。 我的答案是busybox。 1.安装busybox.exe 在这个网站上安装busybox busyb…

如何设计一个自动化测试框架

在进行自动化框架设计之前我们先来看两个问题&#xff0c;什么是自动化框架&#xff0c;设计的时候应该注意什么原则&#xff0c;然后该怎么做&#xff1f;本文会以一个web端的UI自动化测试框架设计为例 Python自动化测试&#xff1a;2023最新合集Python自动化测试开发框架【全…

fishing之第四篇使用案例一模拟登陆口

文章目录 一、访问钓鱼平台二、Sending Profiles&#xff08;发件人邮箱配置&#xff09;三、User&Groups&#xff08;接收人邮件列表&#xff09;四、Landing Pags&#xff08;钓鱼页面配置&#xff09;五、Email Templates&#xff08;邮件内容配置&#xff09;六、Campa…

【C++】二叉搜索树的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

AI介绍——chat gpt/文心一言/claude/bard/星火大模型/bing AI

AI体验 1. AI 介绍&#xff08;注册和使用&#xff09;1.1 Chat GPT1.2 文心一言1.3 Slack 上的 Claude1.3.1 Claude 介绍1.3.2 Claude 使用 1.4 Google的Bard1.4.1 Bard 介绍1.4.2 Bard 使用 1.5 科大讯飞的星火大模型1.5.1 星火大模型 介绍1.5.2 星火大模型 使用 1.6 new bin…

iOS Viper架构(中文版)【看懂这篇就够了】

完整源码地址 一、iOS_Viper iOS的Viper架构&#xff0c;作为一个从业多年的iOS开发者&#xff0c;我个人认为应该要会一点viper 二、前言 viper的设计模式在iOS开发中不流行&#xff0c;甚至是Swift中&#xff0c;也没有用&#xff0c;我认为比较可惜。作为iOSer,当你掌握…

2023年第四届“华数杯”数学建模思路 - 案例:随机森林

## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff1f; 随机森林属于 集成学习 中的 Bagging&#xff08;Bootstrap AGgregation 的简称&#xff09; 方法。如果用图来表示他们之…

electron+vue+ts窗口间通信

文章目录 一. 目的二.逻辑分析三. 代码示例 "types/node": "^20.3.1","vitejs/plugin-vue": "^4.1.0","vueuse/electron": "^10.2.1","electron": "^25.2.0","electron-packager":…

激荡十三年,消费金融进入“体验争夺战”的下半场

消费金融行业又开始涌动着变局。 先是一些老玩家悬着的心&#xff0c;终于落地。过去两年&#xff0c;消费金融是蚂蚁集团整改的关键板块。前不久&#xff0c;蚂蚁集团被监管部门开出71.23亿元的“罚单”&#xff0c;市场普遍认为这是利空出尽的信号。 与此同时&#xff0c;竞…

EventBus 开源库学习(三)

源码细节阅读 上一节根据EventBus的使用流程把实现源码大体梳理了一遍&#xff0c;因为精力有限&#xff0c;所以看源码都是根据实现过程把基本流程看下&#xff0c;中间实现细节先忽略&#xff0c;否则越看越深不容易把握大体思路&#xff0c;这节把一些细节的部分再看看。 …