### 源码地址

  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的简单应用的更多相关文章

  1. Vuex 最简单的数量增减实例

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...

  2. vuex最简单、最直白、最全的入门文档

    前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...

  3. vuex最简单、最详细的入门文档

    如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 . 我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一 ...

  4. vue的挖坑和爬坑之vuex的简单入门

    首先vuex的中文文档https://vuex.vuejs.org/zh-cn/ 首先vuex是什么,官方解释是 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应 ...

  5. NO.01---今天聊聊Vuex的简单入门

    作为一款个人认为非常牛x的框架,个人使用起来得心应手,所以近期就记录一下这款框架吧. 首先说一说 Vuex 是什么? 官方给出的解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它 ...

  6. [转] vuex最简单、最直白、最全的入门文档

    前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...

  7. Vuex教程简单实例

    什么是Vuex? vuex是一个专门为vue.js设计的集中式状态管理架构.状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态.简单的说就是data中需要共用的属性. ...

  8. 移动端最强适配(rem适配之px2rem)&& 移动端结合Vuex实现简单loading加载效果

    一.rem之px2rem适配 前言:相信许多小伙伴上手移动端时面对各式各样的适配方案,挑选出一个自己觉得简便.实用.高效的适配方案是件很纠结的事情. 深有体会... 经过多个移动端项目从最初的 vie ...

  9. vuex最简单的

    https://segmentfault.com/a/1190000009404727 "dependencies": {    "axios": " ...

随机推荐

  1. NLP舞动之中文分词浅析(一)

    一.简介        针对现有中文分词在垂直领域应用时,存在准确率不高的问题,本文对其进行了简要分析,对中文分词面临的分词歧义及未登录词等难点进行了介绍,最后对当前中文分词实现的算法原理(基于词表. ...

  2. java反射机制,以及对反射机制的了解

    反射是什么?反射有什么用?我相信大家在开始学的时候都会有疑惑,直到如今我学的还不够深入只能简单的说说反射的作用,理论的我也听得很迷糊,接下来我就以几个例子来 写写反射的用处: 494696003群,有 ...

  3. 启动第二个activity,然后返回数据给第一个数据

    第一个activity启动的代码: intent = new Intent(MainActivity.this, Main2Activity.class); startActivityForResul ...

  4. 记一次处理mysql数据库无故锁表的经历

    某日,生产环境上的用户表突然无故锁表,原以为只是偶发的bug.所以第一时间想到的解决方案简单粗暴:重启数据库(service mysqld restart).问题得以解决. 10min后,该表再次锁表 ...

  5. Maven 创建项目之简单示例

    maven 是一个项目管理工具.可以用来管理jar包依赖,构建项目等. 那么接下来,就在eclipse中使用maven创建一个简单的项目. 1,依次点击File-> New -> Othe ...

  6. GStreamer基础教程09 - Appsrc及Appsink

    摘要 在我们前面的文章中,我们的Pipline都是使用GStreamer自带的插件去产生/消费数据.在实际的情况中,我们的数据源可能没有相应的gstreamer插件,但我们又需要将数据发送到GStre ...

  7. Spring boot 梳理 - SpringBoot中注入ApplicationContext对象的三种方式

    直接注入(Autowired) @Configuration public class OAConfig { @Autowired private ApplicationContext applica ...

  8. PyCharm中创建项目时,在所创建的python虚拟环境下的pip失效

    在这篇博文里,我简单地叙述了我在使用PyCharm创建一个flask项目时遇到的问题,以及我解决这个问题的过程.其中比较值得注意的点有:①PyCharm创建新项目时的解释器配置②Python虚拟环境的 ...

  9. 浅析java垃圾回收机制

    什么是java程序中的垃圾?什么这些垃圾又是怎样被回收的?为什么会被回收?不进行回收又会怎样?这些问题都是我们要在这篇博客中要解决的问题! 大家都知道,在c语言中,作为程序员,必须得考虑到去怎样回收已 ...

  10. .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架

    框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...