本文系统介绍vuex的全部内容

  1. 为什么用vuex

    组件通信知道吧,相信很多同学,刚学的时候很难懂,实时上在实际应用中,大型项目如果使用最原始的组件通信会非常的麻烦,主要体现在多层嵌套的组件之间的通信,使用vuex可以很方便的处理和维护state
  2. 开始

    1.vuex的特点
    **当store容器中的数据发生变化了,那么组件中的数据也会跟着发生变化
    **更改store中的state值,必须使用commit
    2.安装
    npm install vuex --save
    Vue.use(Vuex)
    3.基本使用
    const store = new Vuex.Store({
    state: {
    count: 0
    },
    mutations: {
    increment(state){
    state.count++
    }
    }
    })
  3. state

    在单文件系统中,组件都是单独的文件如果想访问到vuex的store中的数据需要重复的导入store文件,非常麻烦,可以使用如下方式,只需导入一次即可
    const app = new Vue({
    el: '#app',
    store,
    ...
    })
    就是将store实例,直接赋值给vue根组件的store属性,然后在此根组件下面所有的子组件都可以通过this.$store.state访问到store中的state
    一般获取到store中的某个属性值,会在组件中使用计算属性重新声明一个属性,如下
    const Counter = {
    template: '<div>{{count}}</div>',
    computed: {
    count(){
    return this.$store.state.count
    }
    }
    }
    如果你需要的属性值,很多,那么你叫重复的写很多类似的代码,很麻烦,这时可以使用mapState辅助函数,使用方法如下
    import {mapState} from 'vuex' //导入辅助函数
    export default {
    computed: mapState({
    count: state => state.count // 不做任何处理直接导入
    count: 'count' // 和上面的作用一样
    count // 同名的可以直接简写
    count(state){
    return state.count + this.otherValue
    } // 做特殊处理
    })
    }
    上面可以看到一个mapState将一个computed全占了,这时我要是有自己的计算属性可以使用对象展开运算符
    computed: {
    localComputed(){},
    ...mapState({
    //...
    })
    }
  4. getters

    有些store中的state,并不是组件中需要的数据,而组件要的是基于这个state通过计算后的值,这时可以在store中使用getters选项,这和组件的computed的功能是一模一样的
    const store = new Vuex.Store({
    state: {
    a: 1
    },
    getters: {
    incre: state => {
    return state.a + 1
    }
    }
    })
    那么incre就是2了
    可以通过store.getters.a或者this.$store.a访问
    还可以传递其他的getters,后面具体讲解
    incre: (state,getters) => {
    return getters.a + 1
    }
    mapGetters函数的使用
    和mapState一样
    import { mapGetters } from 'vuex';
    export default {
    computed: {
    ...,
    ...mapGetters([
    'incre'
    ])
    }
    }
  5. mutations

    mutation就是用来同步的修改state中的数据的
    const store = new Vuex.Store({
    state: {
    count: 1
    },
    mutations: {
    increment(state,value){
    state.count++
    }
    }
    })
    调用mutation中的方法需要 store.commit('increment')
    传递数据 store.commit('increment', 10)
    为了保证好的代码风格,可以统一的传递对象
    mutations: {
    increment (state,payload) {
    state.count += payload.amount
    }
    }
    store.commit('increment',{
    amount: 10
    })或者
    store.commit({
    type: 'increment',
    amount: 10
    })
    注意:mutation只能写同步的函数,至于原因是vue的devtool无法捕捉状态,这个devtool几乎用不上
    使用mapMutations函数
    在组件中使用mutations中的函数,最好都放在methods里面,方便管理
    import { mapMutations } from 'vuex'
    methods: {
    ...,
    ...mapMutations([
    'increment'
    ])
    }
  6. actions

    其实actions的功能和methods类似,可以用来处理异步的函数,然后将结果通过mutation传递
    actions: {
    incre(context){
    context.commit('increment')
    }
    } // context 具有和store相同的属性和方法
    也可以使用es6的语法
    actions: {
    incre({commit}) {
    commit('increment')
    }
    }
    触发action中的方法 store.dispatch('incre')
    或者
    store.dispatch('incre',{
    amount: 10
    })
    或者
    store.dispatch({
    type: 'incre',
    amount: 10
    })
    使用mapActions函数
    import { mapActions } from 'vuex';
    export default {
    ...,
    ...mapActions([
    'increment'
    ])
    }
  7. modules

    这部分内容其实就是将如何将一个store拆分成多个小的store
    const moduleA = {
    state: {...},
    ...
    }
    const store = new Vuex.Store({
    modules: {
    a: moduleA
    }
    })
    这就把A模块合并到store中了,通过store.state.a访问moduleA的state
    你要清楚,本质上着就是合并对象,所以你可以使用平常的methods和mutations等使用方法,因为他们实际上就是合并成了一个methods或者mutations等,所以这样就会有一个问题,子模块和子模块、主模块之前的命名冲突问题,但是注意,细心的同学可能发现了,上面介绍的store.state.a这样不可能出现命名冲突,这是对的,因为vue默认只对state做了分开的处理,所以你在子模块中的actions这类的属性中访问到主模块store中的数据必须传递第三个参数rootState,如下
    const moduleA = {
    actions: {
    incre({state,commit,rootState}) {
    ...
    }
    }
    }
    要解决上面提到的命名冲突的问题就要使用到命名空间,如下
    const moduleA = {
    // 添加下面这句话,这个模块就是独立的了,不会和外界发生冲突
    namespaced: true,
    // state不会受到命名空间的影响
    // 在外界要访问到此模块的getters,actions等,需要添加路径
    getters: {
    isAdmin(){....} // getters['moduleA/isAdmin']
    }
    }
    在命名空间中访问主模块的数据要添加 rootState,rootGetters
    细节自查官网,用的真心很少,不同的模块的actions这类的名字能取成一样的也是奇葩

结语

还有一部分内容对于开发来说,没有任何作用,学习就要把自己宝贵的时间放在对你最有用的东西上面

这部分内容是我关于vue的最后的一篇知识归纳,以后将全身心的投入到react的学习当中

vuex的实用知识点的更多相关文章

  1. HTML5实用知识点

    本文讲解HTML5实用知识点 新增的表单type Canvas使用 SVG使用 Audio使用 Video使用 网页缓存 文件缓存 后台worker Server-Sent Events 定位 拖放功 ...

  2. canvas学习笔记,实用知识点总结(上)

    本博客是本人日常学习笔记,作为重要知识点的总结记录,随笔风格可能更倾向于个人的学习习惯和方式,若对您有帮助十分荣幸,若存在问题欢迎互相学习探讨,前端小白一枚在此恭候. 一.基本使用规则 1.创建画布 ...

  3. 浅谈vuex使用方法(vuex简单实用方法)

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

  4. sass实用知识点

    本文总结sass相关核心知识点 说明:本文的内容是,我在开发实践中总结的实用性比较强的sass知识点,其他未涉及的知识,如果对你有作用请自行查阅 sass知识目录 嵌套 注释 SassScript @ ...

  5. dubbo实用知识点总结(三)

    1. 服务降级 2. 优雅停机 3. 主机绑定 4. 访问日志 5. Multicast注册中心 6. zookeeper注册中心 7. 推荐用法 8. 容量规划 9. 基准测试工具包

  6. dubbo实用知识点总结(一)

    1. dubbo基础架构 架构 特性 服务提供者 服务消费者 配置可以用dubbo.properties来替换 2. 注解配置 提供方(注意:serivce注解是dubbo的service) 消费者 ...

  7. dubbo实用知识点总结(二)

    1. 参数验证 2. 结果缓存 3. 泛化引用 客户端没有对应接口类的情况,可以直接调用 4. 泛化实现 5. 回声测试 用于检测服务是否可用 6. 上下文信息 7. 隐式传参(不常用) 8. 异步调 ...

  8. WPF实用知识点

    1.一个基本的WPF程序, 需要引入的程序集WindowsBase, PresentationCore, PresentationFramework using System; using Syste ...

  9. Node.js实用知识点

    本文介绍如何使用nodejs 简单的HttpServer 调试nodejs 基础路由 nodejs配置开发和生产环境 nodejs核心模块一览 express用法 文件I/O nodejs模块 nod ...

随机推荐

  1. 解决Pycharm中matplotlib画图出错问题(AttributeError: module 'matplotlib' has no attribute 'verbose')

    最近在Linux中使用pycharm过程中使用matplotlib无法画图,总是提示错误 /usr/bin/python3. /home/leo/PycharmProjects/untitled1/E ...

  2. 闲聊SEO

    SEO 1. SEO 搜索引擎优化 免费(Baidu,Google) SEM 搜索引擎营销 收费 2. IP 独立IP访问的用户 PV 页面的点击量 UV 独立访客数 3. 搜索引擎蜘蛛 权重 去让搜 ...

  3. 关于series的统计

    1.统计se中各个元素出现的次数: se.value_counts() 这个命令就非常重要!(df没有这个命令) 另外series转dict是to_dict(),注意与数组转list的tolist() ...

  4. JavaScript 对时间日期格式化

    JavaScript 对时间日期格式化 // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位 ...

  5. Python—numpy.flatnonzero()

    numpy.flatnonzero(): 该函数输入一个矩阵,返回扁平化后矩阵中非零元素的位置(index) 这是官方文档给出的用法,非常正规,输入一个矩阵,返回了其中非零元素的位置. 1 >& ...

  6. ng-file-upload - samples

    <script src="angular.min.js"></script> <!-- shim is needed to support non-H ...

  7. vue项目中如何将工具函数模块化导出

    如下所示,utils文件夹下的js里都是封装好的工具函数, 如formatDate.js内容如下: export default (day)=>{ var tmpDate = day ? new ...

  8. LeetCode OJ:Binary Tree Paths(二叉树路径)

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...

  9. hdu 4445 Crazy Tank(物理过程枚举)

    遇到物理题,千万不要一味的当成物理题去想着推出一个最终结果来,这样ACM竞赛成了物理比赛,出题人就没水平了...往往只需要基础的物理分析,然后还是用算法去解决问题.这题n小于等于200,一看就估计是暴 ...

  10. 机器学习(六)— logistic回归

    最近一直在看机器学习相关的算法,今天学习logistic回归,在对算法进行了简单分析编程实现之后,通过实例进行验证. 一 logistic概述 个人理解的回归就是发现变量之间的关系,也就是求回归系数, ...