### 源码地址

  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. Mysql高手系列 - 第13篇:细说NULL导致的神坑,让人防不胜防

    这是Mysql系列第13篇. 环境:mysql5.7.25,cmd命令中进行演示. 当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? ...

  2. asp.net core3.0 mvc 用 autofac

    好久没有写文章了,最近在用.net core3.0,一些开发中问题顺便记录: 1.首先nuget引入 Autofac Autofac.Extensions.DependencyInjection 2. ...

  3. ELK7.3实战安装配置文档

    整体架构   一:环境准备 1.环境规划准备 192.168.43.16 jdk,elasticsearch-master ,logstash,kibana 192.168.43.17 jdk,ela ...

  4. UVA12983 The Battle of Chibi

    第一眼能看出来是个dp O($n^3$) 暴力应该很好想 dp[i][j] = $\sum_{k=1}^i [a[k] < a[i]] *dp[k][j-1]$ 发现dp[i][j] 为前面小于 ...

  5. selenium实现百度图片爬取

    因为是百度图片是瀑布流ajax异步上传的数据,所以这里用到抓包工具来抓取链接(fiddler) 好了直接上代码, from selenium import webdriver from seleniu ...

  6. C++之路 #1

    一.C++介绍C++是C语言的继承,它可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计.C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计 ...

  7. Spark 学习笔记之 Streaming Window

    Streaming Window: 上图意思:每隔2秒统计前3秒的数据 slideDuration: 2 windowDuration: 3 例子: import org.apache.kafka.c ...

  8. Spark 学习笔记之 优雅地关闭Spark Streaming

    优雅地关闭Spark Streaming: 当touch stop文件后,程序仍然会再执行一次,执行完成后退出.

  9. 用js做数字字母混合的随机四位验证码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Javascript设计模式——建造者模式

    建造者模式是相对比较简单的一种设计模式,属于创建型模式的一种: 定义:将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与表现层分离,使相同的构建过程可以创建不同的表示模式:    优点: ...