新人报道!多多关照~多提宝贵意见 谢谢~

vuex理解

采用集中式存储管理模式。用来管理组件的状态,并以自定义规则去观测实时监听值得变化。

状态模式管理理解

属性 理解
state 驱动应用的数据源
view 以声明的方式,将 state 映射到视图
actions 响应在 view(视图)上的用户输入导致的状态变化。

new Vue({
// state 驱动应用的数据源
data(){
return {
count:0
}
},
// view 以声明的方式,将 state 映射到视图
template: `<div> {{ count }} </div>`,
// actions 响应在 view(视图)上的用户输入导致的状态变化。
methods: {
add(){
this.count ++
}
}
})
vuex安装引入

使用前需要下载vuex

npm install vuex --save

在我们的main.js文件中引入该文件,在文件里面添加 import store from ‘./store’;,再在vue实例全局引入store对象;

import Vue from 'vue'
import App from './App'
import router from 'router'
import store from './stroe'
Vue.config.productionTip = false;
new Vue({
el:'#app',
store,
router,
componment:{ App },
template:'<App/>
})

然后在src目录下创建store目录,store目录下创建index.js编写以下代码

import Vue from 'vue'	//引入vue
import Vuex from 'vuex' //引入vuex
Vue.use(Vuex);
//创建Vuex实例
const store = new Vuex.Store({ })
export default store;//导出store

1.vuex四大核心属性

  • state:数据源

我们需要保存的数据在这里定义并存储,可以在组件中通过this.$store.state来获取这些数据

首先在store目录下index.js编写以下代码

import Vue from 'vue'	//引入vue
import Vuex from 'vuex' //引入vuex
Vue.use(Vuex);
//创建Vuex实例
const store = new Vuex.Store({
state:{
count:1, //定义数据源
}
})
export default store;//导出store

然后在我们的任意组件中就可以使用this.$store.state方法获取我们的数据count

<template>
<div>
{{ this.$store.state.count }} //1.页面调用
{{ msg }} //2.方法赋值
</div>
</template>
<script>
export default {
name : 'home',
data () {
return {
msg : null
}
},
mounted(){
this.msg = this.$store.state.count;
}
}
<script/>
  • getters:计算属性

getters相当于vue中的computed计算属性,getters的返回值会根据它的依赖被缓存起来,且只有他的依赖值发生改变时才会被重新计算,这里我们可以通过定义getters监听state中的值的变化,返回计算结果。

首先在store目录下index.js编写以下代码

import Vue from 'vue'	//引入vue
import Vuex from 'vuex' //引入vuex
Vue.use(Vuex);
//创建Vuex实例
const store = new Vuex.Store({
state:{
count:1, //定义数据源
},
getters:{
getStateCount: state => state.count+1 //观测
},
})
export default store;//导出store

在组件页面获取

<template>
<div>
{{ this.$store.state.count }} // count 值:1
{{ this.$store.getters.getStateCount }} //调用getters 值:2
</div>
</template>
  • mutations:事件处理器

数据我们在页面是获取到了,但是如果我们需要修改count值怎么办?如果需要修改store中的值唯一的方法就是提交mutation来修改。

简单事件实例,还是在store/index.js

import Vue from 'vue'	//引入vue
import Vuex from 'vuex' //引入vuex
Vue.use(Vuex);
//创建Vuex实例
const store = new Vuex.Store({
state:{
count:1, //定义数据源
},
getters:{
getStateCount: state => state.count+1 //观测
},
mutations:{
add:state => state.count++,
red:state => state.count--
}
})
export default store;//导出store

组件中使用this.$store.commit(‘mutations事件名称’)调用该方法

<template>
<div>
<p>{{ count }}<p/>
<p>
<button @click='add'></button>
<button @click='red'></button>
</p>
</div>
</template>
<script>
export default {
name : 'home',
data () {
return {
count: 1,
}
},
computed: {
count () {
return this.$store.state.count
}
},
methods: {
add(){
this.$store.commit('add')
},
red(){
this.$store.commit('red')
},
}
</script>
  • actions: 可以给组件使用的函数,用来驱动事件处理器 mutations

通过以上学习我们学会了如何修改state中的值。但是,官方并不建议我们这样直接去修改store里面的值,而是让我们去提交一个actions,在actions中提交mutation再去修改状态值。

因此我们需要先定义一个actions去提交mutation的函数。

import Vue from 'vue'	//引入vue
import Vuex from 'vuex' //引入vuex
Vue.use(Vuex);
//创建Vuex实例
const store = new Vuex.Store({
state:{
count:1, //定义数据源
},
getters:{
getStateCount: state => state.count+1 //观测
},
mutations:{
add:state => state.count++,
red:state => state.count--
},
actions:{
addFn(context) {
context.commit('add');
},
redFn(context) {
context.commit('red')
}
})
export default store;//导出store

然后编辑组件文件,虽然效果相同,但是还是要严格遵从官方写法。

<template>
<div>
<p>{{ count }}<p/>
<p>
<button @click='addFn'></button>
<button @click='redFn'></button>
</p>
</div>
</template>
<script>
export default {
name : 'home',
data () {
return {
count: 1,
}
},
computed: {
count () {
return this.$store.state.count
}
},
methods: {
addFn(){
this.$store.dispatch('addFn')
},
redFn(){
this.$store.dispatch('redFn')
},
}
</script>
  • vuex还有一个属性 modules :存放模块化的数据(不是必须的)

2.vuex拓展

  • mapState
  • mapGetters
  • mapActions

在我们开发过程中会频繁调用store中的方法和数据,此时使用this.$store.state等写法就会显得很臃肿,所有这里介绍mapState、mapGetters、mapActions。

在我们需要使用vuex状态管理的组件中引入。

import { mapState、mapGetters、mapActions } from 'vuex';
.
.
.
computed:{
...mapState({
count : state => state.count
})
}

此时我们页面使用count调用效果相同。

前端Vue框架-vuex状态管理详解的更多相关文章

  1. Vuex状态管理详解

    什么是Vuex 专门为vue应用程序开发的状态管理模式,采用集中式存储管理应用的所有组件的状态(数据),以相应的规则保证状态以一种可预测的方式发生改变 Vuex的作用(什么样的情况下使用Vuex) 多 ...

  2. 前端基础:HTTP 状态码详解

    HTTP 状态码详解 1xx(信息类):表示接收到请求并继续处理 100 客户端应当继续发送请求.这个临时响应是用来通知客户端他的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部 ...

  3. vue项目--vuex状态管理器

    本文取之官网和其他文章结合自己的理解用简单化的语言表达.用于自己的笔记记录,也希望能帮到其他小伙伴理解,学习更多的前端知识. Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态 ...

  4. 应用四:Vue之VUEX状态管理

    (注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 概念:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应 ...

  5. ASP.NET状态管理详解,让你明明白白

    开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...

  6. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  7. 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法

    一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...

  8. vue第十八单元(单向数据流 vuex状态管理)

    第十八单元(单向数据流 vuex状态管理) #课程目标 1.理解什么是数据管理模式 2.什么是vuex 3.什么时候使用vuex 4.vuex安装及工作原理 5.vuex语法 #知识点 1.首先来看下 ...

  9. vue 通信:父子通信、兄弟通信、跨多层通信、vuex状态管理

    之前简单做了一次vue通信方法的培训,在此记录一下培训的内容. 关于vue通信,大家最先想到的方法应该是props.ref.$emit.$parent,还有vuex,因为这也是我在项目中最常用到的方法 ...

随机推荐

  1. 【数据结构与算法】--JavaScript 链表

    一.介绍 JavaScript 原生提供了数组类型,但是却没有链表,虽然平常的业务开发中,数组是可以满足基本需求,但是链表在大数据集操作等特定的场景下明显具有优势,那为何 JavaScript 不提供 ...

  2. SpringBootSecurity学习(08)网页版登录整合MyBatis

    创建数据库 前面介绍了springboot-security整合jdbc从数据库中查询用户的方式,适用性有限,下面介绍最常用的整合MyBatis,这种在开发和生产环境中是最常用,也是最实用的.首先需要 ...

  3. 讨论c/c++计算小数的精度问题

    求出所有100以下整数与一位小数相乘等于相加的浮点数这个有Bug浮点数计算时精度会出现误差 除非使用非常精确的类型或限制浮点的位数 比如 #include <iostream> int m ...

  4. html实现打印预览效果

    前面说到利用lodop插件进行打印设置,那个应用于打印快递面单,或者跟快递面单相似场景的情况. 今天的利用html快速打印出A4纸大小的场景,例如:合同.静态文本等. 效果如下: 方式一 1.设置di ...

  5. [数学基础]奇异值分解SVD

    之前看到过很多次奇异值分解这个概念,但我确实没有学过.大学线性代数课教的就是坨屎,我也没怎么去上课,后来查了点资料算是搞清楚了,现在写点东西总结一下. 奇异值分解,就是把一个矩阵拆成一组矩阵之和.在数 ...

  6. 使用 BeanDefinition 描述 Spring Bean

    什么是BeanDefinition 在Java中,一切皆对象.在JDK中使用java.lang.Class来描述类这个对象. 在Spring中,存在bean这样一个概念,那Spring又是怎么抽象be ...

  7. 夯实Java基础系列11:深入理解Java中的回调机制

    目录 模块间的调用 多线程中的"回调" Java回调机制实战 实例一 : 同步调用 实例二:由浅入深 实例三:Tom做题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 ...

  8. python 关于excel弹窗——请注意,您的文档的部分内容可能包含了文档检查器无法删除的个人信息解决方法

    参考https://www.cnblogs.com/Jacklovely/p/6582732.html 这个问题的原因是由于工作簿包含宏.ActiveX控件等内容, 而Excel被设置为在保存文件时自 ...

  9. Spring MVC拦截器学习

    1 介绍 Spring Web MVC是基于Servlet API构建的原始Web框架. 2 拦截器 2.1 定义 springmvc框架的一种拦截机制 2.2 使用 2.2.1 两步走 实现Hand ...

  10. 导图梳理springboot手动、自动装配,让springboot不再难懂

    什么是springboot 在学springboot之前,你必须有spring.spring mvc基础,springboot的诞生其实就是用来简化新Spring应用的初始搭建以及开发过程,该框架使用 ...