Vuex

一、基础

  1. Vuex 相当于 vue的数据仓库

  2. Vuex 是 vue 的状态管理工具

  3. Vuex中的 state 只能通过mutations 改变

  4. Vuex很适合做购物车

什么是Vuex?

  Vuex采用集中式存储所有组件的数据状态,并且中间状态和store(后台数据)是响应的。

什么是响应?

  前台的组件数据发生改变了,那后台的store数据都会发生改变,从而导致根这个组件有关联的都会改变,所以很适合做购物车。

Vuex有什么好处?及使用场景?

  好处:可以做状态管理 采用LocalStorage保存信息,数据便一直存储在用户的客户端中。

  使用场景:适合在巨大复杂的项目中使用。

Vuex有什么优势?

  1. Vuex的状态存储是响应式的

  2. 它是所有组件的状态集合

Vuex的核心及其作用

  核心概念:state,getters,mutation,action,module

  作用:组件之间的数据通信,使用单向数据流的方式进行数据的中心化管理

详述Vuex的运行机制

  Vuex的状态存储是响应式的,当Vuex组件从store中读取时,若 store状态发生改变,响应的组件也会更新状态,但是直接改变 state,必须通过显示的提交(commit)mutaions来追踪每个状态的变化。

二、Vuex的流程图:

  1. 每个点都是必须的,不执行那个可以省略,但必须按照流程图走。

Vuex的工作流程:

  在vue组件中,通过 dispatch来触发actions提交修改的数据操作,然后通过actions的commit来触发mutations来修改数据,mutations接受到commit的请求,就会自动通过mutate来修改state里面的数据最后由store触发每一个调用它的组件的更新。

  

Vuex的四种状态:

  1. state:就是数据仓库,也是我们仓库存放数据的地方

  我们组件如果想修改数据,正确的操作流程是:

  2.  查看是同步还是异步,是同步则跳过actions,直接从mutations中修改state的数据,这样state仓库的数据修改了之后,我们才能正确的响应到组件上,所以组件仅仅把事件提交给mutationd就好了,让Vuex的mutations的方法执行。

二、Vuex的使用

下载:

  npm i vuex --save

1. 下载之后 在 main.js 引入 Vuex,我们把Vuex封装在 store.js 里面所有main里引的是 store,优化了main。

2. 创建好脚手架后,在src目录下 创建一个 store文件夹,与components同级,在里面创建一个store.js里面这样写。store里面的每个文件夹写对应的js,然后都引入到store中,注入到store仓库中。

3. 向vm实例下注入store

  1. 将创建的store.js 引入到main.js中

  

  在main文件夹下

  向vm实例注入store,store是创建仓库存放数据的,让store(仓库)成为vm的一个属性

  

记住这两句话

1. vuex 中的 state 都是响应的

2. vuex中的 state 只能通过 mutation 改变

store里面存放的是什么?

store是创建仓库存放数据的,让store(仓库)成为vm的一个属性,它是存放Vuex

三、Vuex的五大核心

第一个、state

1. state:state是Vuex的状态,就是存放数据的地方

2. state属性里面有一个count的属性

3. 唯一修改 state状态的是 mutations

1. 在state文件中

  

2. 在组件中通过 {{ this.$store.state.count }} 来获取

  

第二个、mutations

1. mutations 是处理state的所有事件方法

2. 所有直接修改state的行为都是通过mutations

3. 在store中的mutations.js 中:mutations是不对外暴露的,外界无法看的

  

2. 在组件中的 home中

  1. 组件中的事件,通过this.$store.commit("mutations 中的事件名")

  

3. 通过绑定事件进行修改

  

第二中写法载荷

  1. 第一个参数 是 state 存放所有事件方法的参数

  2. 第二个参数 payload 载荷,载荷是传输额外的参数,载荷其实是个对象 可以是字符串 number object

  

  

  1. 在 home 组件里面

  

  

第三个、actions

  1. actions和mutations 是一样的,都是存放事件方法,actions里面存放的是异步方法(定时器)

  2. 组件通过 this.$store.dispatch("")

  3. commit 直接提交给 modules

  4. dispatch提交给actions

  5. dispatch提交给actions

  6. actions 如果我们涉及到异步的提交数据,那就只能从actions开始,到mutations然后才能修改state中的数据,最后渲染到vue组件上。

  7. 如果我们不这样操作,虽然我们的数据因响应式的也可以正常渲染页面,但是我们的Vuex的仓库state,却不能正常的显示。

操作步骤:

  1. vue组件上,我们提交的方式

  

  2. 对我们Vuex的实例建立一个仓库,放一个数据

  

  3. 组件将方法提供给 actions,actions触发行为提交给 mutations,mutations直接去改

  4. 组件将这个行为通过dispatch委托给actions,actions在通过commit委托给mutations的function

    

第四个、getters

1. getter和computed计算属性一样的

2. computed计算属性 只是各个组件自己的

3. computed 计算属性

4. getters只针对state

操作步骤

  1. 通过 $store.getters,fnarr是getters返回的处理后的数据

  

  2. 把处理后的数据返回给fnarr函数

  

第五个、module

  思想:就是将我们写在一起的东西,分开,比如 state仓库的数据,我们可以使用es6的模块化开发,来引入别的模块的数据,先达到文件分离的目的。

  我们还可以使用 module对象,来使我们的仓库分离,只是state仓库中的数据不一样,但别的东西都一样。

  操作步骤:

  1. 在home组件中写

  

  

  2. Vuex的写法

  

作者:晋飞翔
手机号(微信同步):17812718961
希望本篇文章 能给正在学习 前端的朋友 或 以及工作的朋友 带来收获 不喜勿喷 如有建议 多多提议 谢谢!!!

vue学习指南:第十五篇(详细) - Vuex的更多相关文章

  1. vue学习指南:第五篇(详细) - vue的 computed、methods、watch 的区别?

    Computed 计算属性 1. 将函数代码块中返回的结果 赋值 给前面的方法名 2. computed 中的属性有缓存功能,只要data中的数据不发生改变,计算得到的新属       性就会被缓存下 ...

  2. vue学习指南:第三篇(详细) - vue的生命周期

    今天小编给大家详细讲解一下 vue 的生命周期.希望大家多多指教,哪里有遗漏的地方,也请大家指点出来 谢谢. 一. 怎么理解 Vue 的生命周期的? 生命周期:从无到有,到到无的一个过程.Vue的生命 ...

  3. vue学习指南:第十一篇(详细) - Vue的 路由 第一篇 ( router )

    一.路由的配置 路由  vue-router 1. 什么是路由? 路由相当于一个配置对象 路由:就是我们通过不同的url访问不同的内容,通过angular.js 可以实现多视图的单页,现在流行的单页面 ...

  4. vue学习指南:第七篇(详细) - Vue的 组件通信

    Vue 的 父传子 子传父 一.父组件向子组件传值: 父传子 把需要的数据 传递给 子组件,以数据绑定(v-bind)的形式,传递到子组件内部,供子组件使用  缩写是(:) 1.创建子组件,在src/ ...

  5. vue学习指南:第六篇(详细) - Vue的组件 component

    1. 什么是组件?有两种解释 1. 第一种解释: 什么是组件? 1. 组件是 vue 中的一个可复用的实例,所以new Vue() 是vue中最大的那个组件(根组件),有名字,使用的时候以单标签或双标 ...

  6. vue学习指南:第四篇(详细) - vue的 :class 和 :style

    1. :class = “a” 说明 vue 中有个叫 a 的属性 这个标签的class 就是 a的值 2. :class = “{ active:isactive }” Active的存在取决于 i ...

  7. vue学习指南:第十三篇(详细) - Vue的 路由 第三篇 ( 路由的缓存 )

    路由的缓存 路由缓存是 Vue组件优化的一个重要方法 为什么实现路由缓存? 为了 组件间 相互切换不会重复加载数据,影响用户体验,我们通常需要将组件的数组实现缓存,当我们点过来,在点的时候会再次发送 ...

  8. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)

    第十五篇(书中 6.1~6.9节 内容) 好的,昨天完成了第五章. 今天来看第六章. 总结重点: 1.如何对组件进行分组? 跟着做: 重点1:如何对组件进行分组? 首先,选中你想要组合的组件. 然后点 ...

  9. Vue学习之路第五篇:v-bind

    v-bind:是Vue提供的用于绑定html属性的指令. html中常见的属性有:id.class.src.title.style等,他们都是以 名称/值对 的形式出现,如:id="firs ...

随机推荐

  1. 在C#下使用TensorFlow.NET训练自己的数据集

    在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分 ...

  2. node中 package.json 文件说明

    1.概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文 ...

  3. Ubuntu 系统连接到服务器

    Ubuntu 系统连接到服务器 我用的是 Ubuntu18.04 系统 假设你的服务器上的用户名是 root, 域名或者 ip 地址是 xyz 而且配置好了安全组(阿里云的)和云解析 首先要安装 op ...

  4. [Contract] public、external, private、internal 在 Solidity 中如何选择

    合约内部访问的用 private,修饰内部变量时选择.通过 external 函数返回. 合约内部.外部均可访问的用 public. 仅在合约外部访问的用 external,明确暴露给前端使用时选择. ...

  5. 面试想拿 10K,HR 说你只值 7K,该怎样回答或者反驳?

    当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫. 礼貌地说:"7K是吗?了解了.嗯~其实我对贵司的面试官印象很好.只不过,现在我的手头上已经有一份11K的offer. ...

  6. 最全的计算机Java毕业设计题目大全 附 源码

    本文提供数百个计算机毕设题目可以参考 并提供成品源码下载,都是从网上收集而来 源码技术全部采用java+MySQL开发,并结合了其他技术如ssm,ssh,jsp等等. 下载链接在文末! 以下是项目名称 ...

  7. docker - apt-get更换国内源解决Dockerfile构建速度过慢

    背景 使用ubuntu镜像一般apt-get源地址都是在国外导致在构建时因为源地址问题导致下载速度极其得慢 在构建中应事先修改apt-get源地址来避免因下载速度过慢导致的构建缓慢问题 方案 在Doc ...

  8. 【Jmeter】jmeter提取response中的返回值,并保存到本地文件--BeanShell后置处理器

    有个需求,需要在压测环境中,创建几十万的账号数据,然后再根据创建结果,查询到某些账号信息. 按照之前我的做法,直接Python调用API,然后再数据库查询: 但是近期所有开发人员的数据库访问权限被限制 ...

  9. matlab逐行读取text文件,编写函数提取需要的文字

    在数学建模中遇到的数据比较难处理,而且给的是text格式,自己想了好长时间才编出来,现在分享一下,可以交流学习 目标的text文件是 只提取里面的数据 需要自编函数 clc,clear path='D ...

  10. Node.js_1.1

    Node.js简介 Node.js是一个能够在服务器端运行JavaScript的开源代码.跨平台JavaScript运行环境 Node采用Google开发的V8引擎运行js代码,使用事件驱动.非阻塞和 ...