何时使用本地状态以及何时保存到全局状态
正如我们通过共同祖先、事件总线和 Vuex 示例所看到的,Vue.js 生态系统具有管理共享和全局 state 的解决方案。我们现在要考虑的是如何决定某事物属于局部状态还是全局状态。一个好的经验法则是,如果一个 prop 通过三个组件的深度传递,那么最好将该状态放入全局状态并以这种方式访问它。
决定某些内容是本地还是全局的第二种方法是在页面重新加载时询问问题,用户是否期望此信息持续存在? 为什么这很重要? 嗯,全局状态比本地状态更容易保存和持久化。 这是因为全局状态的本质只是一个 JavaScript 对象,而不是组件状态,后者与组件树和 Vue.js 的联系更紧密。
另一个需要记住的关键思想是,很有可能在组件中混合 Vuex 和本地状态。正如我们在 AppProfileForm 示例、练习和活动中看到的那样,我们可以使用 $store.subscribe
有选择地将突变(mutations)中的数据同步到组件中。
归根结底,将 Vue.js 数据属性包装在计算属性中并访问计算属性以使到 Vuex 的潜在转换更容易,这没有任何问题。 在这种情况下,由于所有访问都已通过计算属性完成,因此只需从 this.privateData
更改为 this.$store.state.data
即可。
总结
在本章中,我们研究了 Vue.js 应用程序中共享和全局状态管理的不同方法。
共享祖先中的状态允许通过 props 和事件在兄弟组件之间共享数据。
事件总线具有三个操作:订阅(subscribe)、发布(publish)和取消(unsubscribe)订阅,可用于在 Vue.js 应用程序中传播状态更新。我们还了解了如何将 Vue.js 实例用作事件总线。
您知道 Vuex 模式和库需要什么,它们与 Redux 和 Flux 有何不同,以及通过共享祖先或事件总线使用 Vuex 存储的好处。
最后,我们研究了可以使用什么标准来决定状态应该存在于本地组件状态还是全局或共享的状态解决方案(例如 Vuex)中。本章介绍了 Vue.js 中的状态管理环境。
下一章将深入探讨使用 Vuex 编写大型 Vue.js 应用程序。