Vuex的简单应用
### 源码地址
https://github.com/moor-mupan/mine-summary/tree/master/前端知识库/Vuex_demo/demo
1. 什么是Vuex?
Vuex是一种状态管理模式,将所有组件的状态进行集中式的管理,并以相应的规则保证状态以一种可预测的方式发生变化。
2.Vue的单向数据流?
单向数据流即数据只能从一个方向改变,父组件 => 子组件,例:父组件传递给子组件1和子组件2一个name属性,当子组件1(组件2)改变name时,父组件和子组件2(组件1)的name不会发生变化。但是当改变父组件的name时子组件的name会随之改变。
3.Vuex的应用场景?
大型的单页应用,多个组件共享同一状态时。简单应用使用Vuex会使项目冗余(简单的使用store模式即可)。
4.简单的store模式?
const store = {
debug: true,
state: {
message: 'Hello!'
},
setMessageAction (newValue) {
if (this.debug) console.log('setMessageAction triggered with', newValue)
this.state.message = newValue
},
clearMessageAction () {
if (this.debug) console.log('clearMessageAction triggered')
this.state.message = ''
}
}
5.Vuex的核心概念?
1.state
Vuex使用单一状态树即state,state对象包含了全部应用的层级状态。作为单一数据源存在。
2.Getter
Vuex允许在store中定义一个getters,像计算属性一样,getters的返回值会根据它的依赖缓存起来,只有当依赖值发生变化时才会重新计算。在组件中通过store.getters获取相应的状态值。
在组件中引用getters中的属性时,有时可能需引入多个,可以使用Vuex中的mapGetter辅助函数
Getter参数:1.state作为第一个参数 2.接收其他的getter作为第二个参数
getters: {
test: (参数1, 参数2) => {
return ...
}
}
3.Mutation
更改Vuex的store中的状态的唯一方法是提交mutation(不支持异步操作)//组件中触发_例: this.$store.commit(del, [data])
mutations: {
del (state, index) {
state.comments.splice(index, 1)
},
add (state, data) {
state.comments.push(data)
}
}
4.Action
在组件中使用this.$store.dispatch('xxx')分发action,或者使用mapActions辅助函数将组件的methods映射为store.dispathch调用(需要在根节点先注入store,支持异步操作)//组件中触发_例: this.$store.dispatch(addAction, [data])
actions:{
//delAction (context, index) {
// context.commit('del', index)
//},
addAction (context, data) {
//actions可以实现异步操作-- 模拟异步
setTimeout(() => {
context.commit('add', data)
}, 2000)
}
5.Module
由于使用单一状态树,应用的所有状态都集中到同一个对象上。当应用很复杂时,store会变得很臃肿。因此Vuex允许我们将store分割为模块(可嵌套)。
*6.如何使用Vuex?
1.简单使用
1.创建一个store文件夹,文件夹下创建index.js文件
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex); //创健一个state对象
const state = {
comments: [
{
userName: 'jack',
comment: 'Vue so easy'
},
{
userName: '小明',
comment: 'Vue 非常棒!'
},
]
} //创建getters对象 存储初始化数据(相当于Vue的computed(计算属性) ),可不使用getters而直接在组件中通过store.state获取状态值
const getters = {
initComments (state) {
return state.comments
}
} //修改状态(仅支持同步,实现异步需要使用actions)-- 如下del为同步,add为异步,可传入两个参数,1为state,2为要改变的值
const mutations = {
del (state, index) {
state.comments.splice(index, 1)
}, add (state, data) {
state.comments.push(data)
}
} //通过commit方法提交任务,可传入两参数,1位context,2为要改变的值
const actions = {
//delAction (context, index) {
// context.commit('del', index)
//}, addAction (context, data) {
//actions可以实现异步操作-- 模拟异步
setTimeout(() => {
context.commit('add', data)
}, 2000)
}
} //使用Vuex的store方法生成 store对象
const store = new Vuex.Store({
state,
getters,
mutations,
actions
}) export default store
2.main.js入口文件引入 store/index.js
// 外部js/UI库
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css' // 自定义文件
import store from './store/index.js'
import './assets/css/reset.css' // 组件
import App from './App.vue'
Vue.use(ElementUI) new Vue({
el: '#app',
store,
template: '<App />',
components: {App}
})
3.在组件中使用
// Add.vue
// 通过dispatch 分发actions任务,修改状态值
this.$store.dispatch('addAction', data) // List.vue
//使用计算属性 -- 获取状态值
computed: {
comments () {
return this.$store.getters.initComments // 如果未使用 getters则可通过state得到状态
// return this.$store.state.comments
}
} // 通过commit提交载荷 ,修改状态值
this.$store.commit('del', index)
2.store模块化
后续更新...
Vuex的简单应用的更多相关文章
- Vuex 最简单的数量增减实例
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...
- vuex最简单、最直白、最全的入门文档
前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...
- vuex最简单、最详细的入门文档
如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 . 我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一 ...
- vue的挖坑和爬坑之vuex的简单入门
首先vuex的中文文档https://vuex.vuejs.org/zh-cn/ 首先vuex是什么,官方解释是 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应 ...
- NO.01---今天聊聊Vuex的简单入门
作为一款个人认为非常牛x的框架,个人使用起来得心应手,所以近期就记录一下这款框架吧. 首先说一说 Vuex 是什么? 官方给出的解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它 ...
- [转] vuex最简单、最直白、最全的入门文档
前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...
- Vuex教程简单实例
什么是Vuex? vuex是一个专门为vue.js设计的集中式状态管理架构.状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态.简单的说就是data中需要共用的属性. ...
- 移动端最强适配(rem适配之px2rem)&& 移动端结合Vuex实现简单loading加载效果
一.rem之px2rem适配 前言:相信许多小伙伴上手移动端时面对各式各样的适配方案,挑选出一个自己觉得简便.实用.高效的适配方案是件很纠结的事情. 深有体会... 经过多个移动端项目从最初的 vie ...
- vuex最简单的
https://segmentfault.com/a/1190000009404727 "dependencies": { "axios": " ...
随机推荐
- springboot之全局处理异常封装
springboot之全局处理异常封装 简介 在项目中经常出现系统异常的情况,比如NullPointerException等等.如果默认未处理的情况下,springboot会响应默认的错误提示,这样对 ...
- Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08
目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...
- uboot学习之BL3的流程
BL2的最后通过汇编调用了board_init_r函数,此时进入BL3的阶段,此时的主要工作: 这一阶段涉及的文件及任务如下 arch/arm/lib/board.c 1. boa ...
- C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)
public static string HttpPost(string url, string param = null) { HttpWebRequest request; //如果是发送HTTP ...
- 高通电源管理qpnp-vm-bms驱动
1. compatible节点: qpnp-vm-bms.c使用来控制电池曲线的和BMS功能的,其compatible节点是"qcom,qpnp-vm-bms" 2. probe函 ...
- Hadoop核心组件之HDFS
HDFS:分布式文件系统 一句话总结 一个文件先被拆分为多个Block块(会有Block-ID:方便读取数据),以及每个Block是有几个副本的形式存储 1个文件会被拆分成多个Block blocks ...
- 死磕 java同步系列之redis分布式锁进化史
问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些缺点? (4)redis实现分布式锁有没有现成的轮子可以使用? 简介 Redis(全称:R ...
- angular6 iframe应用
问题一. iframe如何自适应屏幕高度 解决思路:通过设置iframe外层父元素高度等于window高度,再相对于父元素定位iframe元素:案例如下: 第一步: 模板文件中使用iframe // ...
- 2017CCSP-01 五子棋 简单模拟
题面和数据 对于每个空格,先定义一个变量cnt=0,表示空格填充后对五子数量的变化,四个方向进行两边搜索,设对于每个方向连续的白棋子分别为\(wa\),\(wb\),有以下几种情况. \(wa> ...
- 快学Scala 第十一课 (类继承)
类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...