VueX详解
vuex是什么?
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.
简单来说 : vuex 是 Vue 配套的 公共数据管理工具,它可以把一些共享的数据,保存到 vuex 中,方便 整个程序中的任何组件直接获取或修改我们的公共数据;
vuex使用步骤:
1. npm安装,引入并在Vue上挂载VueX
命令: npm
install vuex --save
在一个模块化的打包系统中,您必须显式地通过 Vue.use() 来安装 Vuex:
//main.js文件
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
2.创建store,把store理解成VueX的一个整体配置对象(核心),所有的VueX有关的配置,如state,getter,action等都在store里配置
vue数据流图:
核心概念1: State 把state理解成VueX中的公共状态,可以理解成所有组件公用的data,用于保存公共的数据
const store = new Vuex.Store({
state:{
products:[
{name:'苹果',price:6},
{name:'草莓',price:10},
{name:'火龙果',price:4},
{name:'芒果',price:12.5},
{name:'橘子',price:3.9}
],
},
});
核心概念2: Getters 我们就将getters当做store的计算属性,这样既不需要在每个需要该计算属性的组件里重复复制,也不需要单独将其抽离出来,还能保证在每个组件内都能使用
const store = new Vuex.Store({
getters:{
saleProducts:(state)=>{
return state.products.map(p=>{
return {
name:p.name,
price:p.price/2
}
})
}
},
});
核心概念3: Actions Action 类似于 mutation,不同在于: 1. Action 提交的是 mutation,而不是直接变更状态。 2. Action 可以包含任意异步操作。
//mutation
const store = new Vuex.Store({
mutations:{
riseInPrice(state,payload){
state.products.forEach(p=>{
p.price-=payload;
})
},
},
});
//Actions
const store = new Vuex.Store({
actions:{
//Action 函数不是直接变更状态,所以他没有state参数
riseInPriceAsync(context,payload){
//Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
setTimeout(()=>{
context.commit('riseInPrice',payload);
},2000)
}
}
});
核心概念4: Module 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。 为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态
3. 在vue实例里注册store
//main.js文件
new Vue({
el: '#app',
store,
components: { App },
template: '<App/>'
});
参考vue官网: https://vuex.vuejs.org/zh/
- 程序员的未来
- windows2012服务器搭建mongodb并设置远程访问
- 腾讯地图开放H5定位API,率先支持iOS10
- 写让别人能读懂的代码
- 安装serverstatus监控多台服务器状态
- Windows2012搭建我的世界(Minecraft)服务器超简单
- 高效程序员的MacBook工作环境配置
- vsftpd搭建自己的ftp服务器
- Linux一键安装Transmission电影下载到服务器
- centos安装ab工具给网站进行压力测试
- ubuntu16.04安装mongodb教程
- linux压缩解压命令使用
- linux使用wc命令查看文件行数、字母、字节数命令
- 程序员偷偷深爱的 9 个不良编程习惯
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 企业面试题|最常问的MySQL面试题集合(二)
- 值得一看的35个Redis面试题总结
- 容器技术|Docker三剑客之docker-machine
- 企业面试题|最常问的MySQL面试题集合(三)
- 「微服务架构」API版本控制最佳实践介绍
- 2020年最新字节、阿里、腾讯、爱奇艺等BAT Android社招高频面试题,押题99.98%!
- 使用镜像部署 Hexo 静态页面
- 基于zmq RPC简单C++实现
- App为什么会crash?一篇文章带你探究根本原因 ,事情没有你想得那么简单!
- MySQL 8.0新特性 — 用户管理
- Java15的新特性
- ZooKeeper到底为Kafka的做了什么牺牲?
- Flutter原理:三棵重要的树(渲染过程、布局约束、应用视图的构建等)
- FlutterDojo设计之道—状态管理之路(六)
- Day9.函数进阶