vuex 学习笔记

1、vuex的简单使用方法

  安装: cnpm install vuex --save

  使用:

    (1)新建一个store的文件夹

      代码例子:

import Vue from ‘vue‘
import Vuex from ‘vuex‘

Vue.use(Vuex)

const state = {
    count: 0
}

const mutations = {
    increment(state) {
        state.count ++;
    }
}

export default new Vuex.Store({
  state,
  mutations
})

    (2)在main.js里面引用      

new Vue({
  el: ‘#app‘,
  store,
  router,
  template: ‘<App/>‘,
  components: { App }
})

    (3)在组件里面里面使用   

export default {
    computed: {
        count() {
            return this.$store.state.count
        }
    }
}

2、state

  (1)mapState函数

    当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键

  PS: 当computed里面还要同时放置其他的计算属性的时候,可以把state的通过对象展开运算符

computed: {
      ...mapState({=
        count: state => state.count,
        countAlias: ‘count‘,
        countPlusLocalState (state) {
          return state.count + this.localCount
        }
      })

    }

2、getter

  getter的返回值会根据它的以来被缓存起来,且当只有它的依赖值发生改变才会被重新计算 

  (1)接受state作为第一个参数

const getters = {
    evenCount: state => {
        return state.count + 2;
    }
}

export default new Vuex.Store({
  getters
})

  (2)接受其他的getter作为第二个参数 

doneTodos: state => {
    return state.todos.filter(todo => todo.done)
},
doneTodosCount: (state, getters) => {
    return getters.doneTodos.length
}

  (3)也可以通过返回一个函数,实现给 getter 传参

getTodosById: state => (id) => {
    return state.todos.find(todo => (todo.id) === id)
}

  (4)mapGetters辅助函数  

...mapGetters({
     evenCount:‘evenCount‘,
     doneTodos: ‘doneTodos‘,
     doneTodosCount: ‘doneTodosCount‘,
})

3、mutation: 同步函数

  更改vuex的store中的状态的唯一发哪地方是提交mutation,在vuex中的mutation非常类似与事件:每个mutation都有一个字符串的事件类型(type)和一个回调函数(handler)。这个回调函数就是我们实际进行状态更改的地方,并且他会接受一个state作为第一个参数:  

const mutations = {
    increment(state) {
        state.count ++
    }
}

  (1)mapMutations  

methods: {
    ...mapMutations({
        add: ‘increment‘
    })
}

  (2)可以向mutation传入额外的参数,即mutation的载荷  

customIncrement(state, payload) {
    state.count += payload.n
}

  使用:   

customAdd() {
    return this.$store.commit("customIncrement", {
        ‘n‘: 3
    })
}

4、action : 可以异步执行

  Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作。

  使用: 

export default {
    addevent: ({commit}, param) => commit(‘ADDEVENT‘, param),
    reduce: ({commit}, param) => commit(‘DISCREMENT‘, param),
}

  调用:   

...mapActions({
    add1: ‘addevent‘
}),
reduce() {
    this.$store.dispatch("reduce").then(() => {
        console.info(23342)
    })
}

  PS: 异步执行可以利用.then 、 async/await

5、module

  由于使用单一状态数的话,应用的所有会集中到一个比较大的对象,当应用变得非常复杂的时候,store对象就有可能变得相当的臃肿,因此可以将store分割模块,每个模块拥有自己的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 的状态
时间: 2024-10-15 15:28:34

vuex 学习笔记的相关文章

vuex学习笔记

参考地址:https://vuex.vuejs.org/zh-cn/intro.html Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式管理存储管理应用的所有组件的状态,并以相应规则保证状态以一种可预测的方式发生变化 什么是"状态管理模式"? 1 new Vue({ 2 // state 3 data () { 4 return { 5 count: 0 6 } 7 }, 8 // view 9 template: ` 10 <d

Vuex 学习笔记一

一.定义 Vuex是一个专为Vue.js应用程序开发的状态管理模式. 状态管理模式 简单的demo new Vue({ // state data () { return { count: 0 } }, // view template: ` <div>{{ count }}</div> `, // actions methods: { increment () { this.count++ } } }) state,驱动应用的数据源: view,以声明方式将state映射到视图:

仿知乎日报学习笔记与优化

仿知乎日报学习笔记与优化项目原地址(有些小BUG):单页网页应用:https://github.com/pomelo-chuan/Zhihu-Daily-Vue.js知乎日报api查询:https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90如果想看完整的API的json数据的话,推荐使用sublime,网上搜索sublime jso

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.