vuex单一状态树_Web前端:Vuex是什么?内容有哪些?

6690bdd881bac60e32b764150a8b9474.png

大家好,我来了,本期为大家带来的前端开发知识是”Web前端:Vuex是什么?内容有哪些?“,有兴趣做前端的朋友,和我一起来看看吧!

1. Vuex 是什么?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

2. 回顾我们熟悉的数据传递方式

Props、$parent、$root、自定义事件$emit(.sync)、EventBus

EventBus的应用场景:组件数据传递(组件较少的情况下)

组件特别多,而且对数据要求可预测改变,就应该使用vuex

3. Vuex核心知识点

  • Store:仓库
  • State:状态
  • Mutation:计算方式
  • Action:动作
  • Getter:读取数据的方案
  • Module:模块
  • Vuex流程:

faac608b9025fc778b33fbe1d28f2d04.png

4. 什么情况下我应该使用 Vuex?

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。

如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。引用 Redux 的作者 Dan Abramov 的话说就是:Flux 架构就像眼镜:您自会知道什么时候需要它。

5. 安装

53b27536fad6b7ee1804f56fc906ca4c.png

Vuex 依赖 Promise。如果你支持的浏览器并没有实现 Promise (比如 IE),那么你可以使用一个 polyfill 的库,例如 es6-promise。

89fd725a8f580a729ebc935dc6665d02.png

代码添加到你使用 Vuex 之前的一个地方

64dba055f81d4200ad794228e808d11d.png

6. Store仓库

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:

1.Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

2.你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用

16288c17a43b13f3aff51769abd39dfd.png

7. State

Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 (SSOT)”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。

mapState 辅助函数

d47136ecf2fbe831508bbd3df8c6d768.png

8. Mutation

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

f4eb6abe17b4ee33fb967bf1e913359f.png

提交载荷(Payload)(携带参数)

你可以向 store.commit 传入额外的参数,即 mutation 的 载荷(payload):

c9a31c3ed0ada24cfcc5b4b7206f85ee.png

对象风格的提交方式

6e72e7ab9493dd7fb926215194b775ec.png

Mutation 需遵守 Vue 的响应规则

既然 Vuex 的 store 中的状态是响应式的,那么当我们变更状态时,监视状态的 Vue 组件也会自动更新。这也意味着 Vuex 中的 mutation 也需要与使用 Vue 一样遵守一些注意事项:

1 最好提前在你的 store 中初始化好所有所需属性。

2. 当需要在对象上添加新属性时,你应该使用 Vue.set(obj, 'newProp', 123),

使用常量替代 Mutation 事件类型

d59230ed9d01727ae7df37ca87611b8e.png

Mutation 必须是同步函数

现在想象,我们正在 debug 一个 app 并且观察 devtool 中的 mutation 日志。每一条 mutation 被记录,devtools 都需要捕捉到前一状态和后一状态的快照。然而,在上面的例子中 mutation 中的异步函数中的回调让这不可能完成:因为当 mutation 触发的时候,回调函数还没有被调用,devtools 不知道什么时候回调函数实际上被调用——实质上任何在回调函数中进行的状态的改变都是不可追踪的

在组件中提交 Mutation(快捷方式)

你可以在组件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用(需要在根节点注入 store)。

9. Actions

Action 类似于 mutation,不同在于:

1. Action 提交的是 mutation,而不是直接变更状态。

2. Action 可以包含任意异步操作。

在组件中分发 Action

你在组件中使用 this.$store.dispatch('xxx') 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用(需要先在根节点注入 store)

14f1844016e2c886cbf59caf0a36dea4.png

10. Getter

有时候我们需要从 store 中的 state 中派生出一些状态,例如对列表进行过滤并计数

016e4386b0f39aa23729f2f3c92b301e.png

通过方法访问

737201ea83a3713846e4842aa85a4638.png

mapGetters 辅助函数

7639c8b31d30f712fa88d1d433f9d950.png

11. module

本次为大家带来的前端文章内容”Web前端:Vuex是什么?内容有哪些?“到此结束了,对前端开发有兴趣的朋友,关注我,我们下期再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值