| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vuex的学习和使用 -> 正文阅读 |
|
[JavaScript知识库]vuex的学习和使用 |
vuex的基本内容一、Vuex的理解?1、Vuex是什么??? 官方标准: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 ?2、Vuex是用来干什么的??? 大家试想一下,如果我们在项目开发中频繁的使用组件传值的方式来同步data的值,一旦项目变得非常庞大,管理和维护这些值就会变得异常的麻烦。因此,Vue提供了一个统一管理工具——Vuex,Vuex就是专门用来统一管理这些被多个组件频繁使用的值。 ?3、为什么要使用Vuex?VueX状态自管理应用包含以下几个部分:
我们都知道Vue的理念就是单页面应用和单项数据流:
?? 对于第一点,传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。对于第二点,我们经常会采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。 ?? 因此,我们为什么不把组件的共享状态抽取出来,以一个全局单例模式管理呢?在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为! ?? 通过定义和隔离状态管理中的各种概念并通过强制规则维持视图和状态间的独立性,我们的代码将会变得更结构化且易维护。 ?? 这就是 Vuex 背后的基本思想,与其他模式不同的是,Vuex 是专门为 Vue.js 设计的状态管理库,以利用 Vue.js 的细粒度数据响应机制来进行高效的状态更新。 ?4、什么情况下才去使用vuex??? 如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。 二、Vuex的核心内容?1、State??理解: 用来管理和存储vue中的属性(存放状态) ??如何获取State状态?
?2、Mutation??理解: 更改 Vuex 中store状态的唯一方法,是同步,且必须是同步函数!(state成员操作) ??如何定义一个mutation?
??如何调用这个mutation?
??提交载荷(Payload), 即传入额外参数
??载荷以对象的方式传入
??this.$store.commit 提交的两个参数以对象的方式传入
??使用常量替代 Mutation 事件类型
?3、Getter??理解: 相当于State的计算属性(加工state成员给外界) ??为什么要用getter?
??但是,这种做法如果放到多个需要用到这个属性的组件中,那么我们要么就是复制这个函数方法,或者封装一个共享的函数方法,然后在多个地方导入它,无论哪一种方法,是不是都觉得很麻烦?而且,你每一个地方调用一次,它就得重新过滤计算一次。为此,getter就能帮我们解决这个问题,因为getter就相当于state状态的计算属性,可以直接在getter中计算好,然后再将这个加工完成的state成员抛给外界,然后你在多处地方用到这个状态的时候,直接store.getter.handleCount.length就可以了。
??注意: getter 接受 state 作为其第一个参数,也可以接受其他 getter 作为第二个参数,且getter 在通过属性访问时是作为 Vue 的响应式系统的一部分缓存其中的。 ?4、Action??理解: 像一个装饰器,包裹mutations,使之可以异步操作。也可以处理同步的操作。(异步操作) ??不同点: ??举例:
??action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,但是它并不是store实例本身,大家不要搞混了,等我们讲到modules的时候会详细介绍。因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。 ??触发方式:
??组合使用:以登录为例
?5、Module??理解: 设置模块,让每一个模块都拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。(模块化Vuex)
??模块的局部状态
??同样,对于模块内部的 action,局部状态通过 context.state 暴露出来,对于模块内部的 getter,根节点状态会作为第三个参数context.rootState暴露出来。
?6、辅助函数??理解: 以上,我们仅仅只是了解了State、Getters、Mutations、Actions、Modules等的概念,在实际使用过程中,随着业务功能的逐渐增加,会出现很多个状态。当一个组件需要多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。因此,为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,帮你减少工作量。 ?①、mapState??理解: mapState 函数返回的是一个对象。如果我们想将它与局部计算属性混合使用,通常,我们需要使用一个工具函数将多个对象合并为一个,以使我们可以将最终对象传给 computed 属性。但是自从有了对象展开运算符,我们可以极大地简化写法。
??注意: 如果你是想要使用mapState混入不同模块中的状态,那么用以下方式,且要记住,如果你data中定义了跟计算属性计算的变量名一样,那这时候会报错,vue 就只会识别data中定义的变量。并且,mapState一般写在计算属性computed当中。
?②、mapGetters??理解: mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性中。
??如果你想将一个 getter 属性另取一个名字,则可以使用对象形式。并且,mapGetters一般写在计算属性computed当中。
?③、mapMutations??理解: 使用mapMutations辅助函数将组件中的methods映射为store.commit调用。简单理解就是把mutations中的方法映射到methods当中,这样你就可以直接像methods中的方法一样,通过this.XXX调用该方法。
??注意: 如果你想用mapMutations映射到不同模块的store.commit调用,那么用以下的方法。并且,mapMutations一般写在methods当中。
?④、mapAction??理解: 使用mapActions辅助函数将组件的methods映射成store.dispatch调用。简单理解就是把actions中的方法映射到methods当中,这样你就可以直接像methods中的方法一样,通过this.XXX调用该方法。
??注意: 如果你想用mapActions映射到不同模块的store.dispatch调用,那么用以下的方法。并且,mapActions一般写在methods当中。
?7、命名空间??理解: 命名空间(namespaced)主要用来解决不同模块命名冲突问题。当modules中导入的组件过多,并且有相同的方法名,当你想调用这个方法的时候系统默认调取的是最后导入组件中的那个方法,而不是你想调用的那个方法。这时,你就可以用namespaced:true 设置命名空间解决模块命名冲突问题。
??注意: 与modules不同的是,mutations, actions, getter 没有命名空间的限定,所以要保证全局的唯一性,否则后者会覆盖前者。 下一节内容是vuex中如何自动引入当前modules文件夹下的所有文件。 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:25:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |