优点:通过定义和隔离状态管理中的各种概念并强制遵守一定的规则,我们的代码将会变得更结构化且易维护。使用vuex来引入外部状态管理,将业务逻辑切分到组件外,可以避免重复的从服务端抓取数据。

详情请参考官网文档__链接

规则:

1:应用层级的状态应该集中到单个 store 对象中。

2:提交 mutation 是更改状态的唯一方法,并且这个过程是同步的

3:异步逻辑都应该封装到 action 里面

使用场景1:例如要实现在一个显示组件中提交表单,另一个组件的内容需要随之改变:

没有使用vuex前: (与服务端交互2次)

表单组件提交内容时,我们需要与服务端交互一次(提交);

显示组件更新内容时:我们又需要与服务端交互一次(获取)。

使用vuex后: (与服务端交互1次)

表单组件提交内容时,我们在actions中与服务端交互,然后触发mutation,改变state中的数据状态;

显示组件直接使用getters获取states中的数据。

使用场景2如果组件只在本地改变数据,不与服务端交互,并且显示组件也要随之改变。那不使用vuex是非常难实现的。

没有使用vuex前:

?

使用vuex后:

触发mutation,改变state中的数据状态;

显示组件直接使用getters获取states中的数据。

实例1:加减法,实现组件间的值一同变化

文件目录:

1:编写app.vue

<template>
<div id="app">
<router-view></router-view>
<div>
count is {{count}}
<router-link to="/component1">组件1</router-link>
<router-link to="/component2">组件2</router-link>
</div>
</div>
</template> <script>
import {mapGetters, mapActions} from 'vuex'
export default {
name: 'app',
computed: mapGetters([
'count'
])
}
</script>

这里需要知道mapGetters的含义: mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性。传送门

2:编写 component1.vue和 component2.vue。

这两个组件的内容一样(组件二中,请改为 组件2 count is,是为了好区分):

<template>
<div class="hello">
组件1count is {{count}}
<button @click="increment">+5</button>
<button @click="decrement">-3</button>
</div>
</template> <script>
import {mapGetters, mapActions} from 'vuex'
export default {
computed: mapGetters([
'count'
]),
methods: mapActions([
'increment',
'decrement'
])
}
</script>

  

3:router/index.js 路由文件

import Vue from 'vue'
import Router from 'vue-router'
import component1 from '@/components/component1'
import component2 from '@/components/component2'
Vue.use(Router) export default new Router({
routes: [
{
path: '/component1',
name: 'component1',
component: component1
},
{
path: '/component2',
name: 'component2',
component: component2
}
]
})

  

4:编写vuex/index.js   

import Vue from 'vue'
import Vuex from 'Vuex'
import getters from './getters'
import actions from './actions'
import mutations from './mutations' Vue.use(Vuex) const state = {
count: 0
} const store = new Vuex.Store({
state,
getters,
actions,
mutations
}) export default store

这里需要知道state的含义:传送门

5:编写vuex/actions.js

const actions = {
increment : ({commit}) => commit('increment'),
decrement : ({commit}) => commit('decrement')
} export default actions

这里需要知道actions的含义:传送门

6:编写vuex/mutaions.js

const mutations = {
increment : state =>{
state.count = state.count+5
},
decrement : state =>{
state.count = state.count-3
},
} export default mutations

这里需要知道mutaions的含义:传送门

7:编写vuex/getters.js

const getters = {
count: state => state.count
} export default getters

这里需要知道getters的含义:传送门

8:编写main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './vuex/index' Vue.config.productionTip = false /* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})

  

npm run dev后,启动项目:

二:直接写在一个文件中的方式:

import Vue from 'vue'
import Vuex from 'Vuex' Vue.use(Vuex) const state = {
candidateEduList: [],
relationList: []
}
const mutations = {
// 设置教育列表
setEduList(state, resData) {
state.candidateEduList = resData
},
// 设置关系列表
setRelationList(state, resData) {
state.relationList = resData
}
} const store = new Vuex.Store({
state,
mutations
}) export default {
store
}

1、组件中直接commit

this.$store.store.commit('setLogin')

带参数的方式:

this.$store.store.commit('setLogin',data)

  

 2、组价中读取

this.$store.store.state

  

vue学习笔记(五):对于vuex的理解 + 简单实例的更多相关文章

  1. Vue学习笔记(五)——配置开发环境及初建项目

    前言 在上一篇中,我们通过初步的认识,简单了解 Vue 生命周期的八个阶段,以及可以应用在之后的开发中,针对不同的阶段的钩子采取不同的操作,更好的实现我们的业务代码,处理更加复杂的业务逻辑. 而在这一 ...

  2. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  3. Vue学习笔记五:事件修饰符

    目录 什么是事件修饰符 没有事件修饰符的问题 HTML 运行 使用事件修饰符 .stop阻止冒泡 .prevent 阻止默认事件 .capture 添加事件侦听器时使用事件捕获模式 .self 只当事 ...

  4. Vue学习笔记-Vue.js-2.X 学习(五)===>脚手架Vue-CLI(PyCharm)

    Vue项目在pycharm中配置 退出运行: ctrl+c Vue学习笔记-Vue.js-2.X 学习(六)===>脚手架Vue-CLI(项目说明)

  5. Vue学习笔记-Vue.js-2.X 学习(四)===>脚手架Vue-CLI(基本工作和创建)

    (五) 脚手架Vue-CLI 一 Vue-CLI前提(nodejs和webpack) 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nod ...

  6. Vue学习笔记-2

    前言 本文非vue教程,仅为学习vue过程中的个人理解与笔记,有说的不正确的地方欢迎指正讨论 1.computed计算属性函数中不能使用vm变量 在计算属性的函数中,不能使用Vue构造函数返回的vm变 ...

  7. vue 学习笔记(二)

    最近公司赶项目,一直也没时间看 vue,之前看下的都快忘得差不多了.哈哈哈,来一起回顾一下vue 学习笔记(一)后,继续向下看嘛. #表单输入绑定 基础用法 v-model 会忽略所有表单元素的 va ...

  8. vue学习笔记之:为何data是一个方法

    vue学习笔记之:为何data是一个方法 在vue开发中,我们可以发现,data中的属性值是在function中return出来的.可为何data必须是一个函数呢?我们先看官方的解释: 当一个组件被定 ...

  9. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

随机推荐

  1. 继续深入更新shell脚本容易出错的地方

    一.在shell中用到如果需要输入某些值,需要用到read -p命令 这是我写的猜数字游戏,一开始在输出的时候,屏幕上总会打印输出  "INT" 经过反复的练习才发现 双引号后面应 ...

  2. MFC非模态添加进程控件方法二(自定义消息方法)

    以下内容有大部分转载自CSDN,经过自己整理完成. 该文主要的方法为在非模态对话框中自定义一组消息函数,然后在主窗口中开辟一个线程通过线程把消息传递给子窗口进行更新. 在子窗口类中定义消息如下: /* ...

  3. django路由基本使用-6

    路由定义位置 django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的. urls.py 文件是路由解析的入口. from django.conf.urls import ...

  4. Python学习:12.Python字符串格式化

    字符串格式化 讲解Python这么久,也没有讲解Python的字符串的格式化,那我们今天就来了解一下python字符串格式化的强大之处. 首先我们先理解一下为什么要有字符串的格式化,就是为了方便字符串 ...

  5. error: command 'aarch64-linux-gnu-gcc' failed with exit status 1

    使用jetson tx2安装tensorpack时报错: error: command 'aarch64-linux-gnu-gcc' failed with exit status 1 改正: 如果 ...

  6. golang 多维哈希(map,hashmap)实践随笔

    有些场景使用多维哈希来存储数据,时间复杂度恒定,简单粗暴好用.这里记录一下. 如下是三维哈希的简单示意图,建议层数不要太多,否则时间久了,自己写的代码都不认识. 下图是三维哈希在内存的存储形式,has ...

  7. 封装axios方法之一

    一.先来说说为什么要封装axios异步请求. 我们前端开发中总是会遇到跨域的问题,我们会配置proxy来解决跨域的问题,无论是vue 还是react. 如何配置我这里就不说了. 然后...然后我们就会 ...

  8. pix2code开发笔记

    1.软件安装 首先需要安装Python3和pip (1) Python3 环境搭建 Window 平台安装 Python:  https://www.python.org/downloads/wind ...

  9. 4、Java并发编程:synchronized

    Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...

  10. js中call()方法和apply方法的使用

    1. 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...