【应用场景解析】组件通信的状态管理

 

通过组件化的方式能够有效地将 Web 页面进行解耦,但另一个问题也随之出现,组件之间如何进行通信。我们就来分析组件化 Web 应用中的组件通信问题。

一、全局状态

对于父子组件通信,框架都已给出可行的解决方案:父组件通过 prop(s) 属性向子组件传参,子组件通过自定义事件来向父组件发送消息。而非父子组件之间,如果通过层层传递,这个过程就会变得相当麻烦。最简单的直接解决方式就是设置一个供多个组件共享的全局变量,但如果直接使用全局变量会存在一些问题,比如:

  • 可能多个组件会同时修改变量值,这个过程无法追踪,调试问题也会变得很麻烦;
  • 当全局变量值发生变化时,如何通知引用它的每一个组件?

1、状态管理库的特点

针对这些问题,一些状态管理库出现了,我们重点分析用于 Vue 的 Vuex 和用于 React 的 Redux,所谓的“状态”,就是不同组件之间传递和引用的数据模型。状态管理库具有 3 个特点:可预测、中心化、可调式。

可预测

可预测性指的是,如果状态 A 经过操作 B 会生成状态 C,那么不论在任何时刻、任何平台(客户端、服务端、App 端),只要 A 和 B 不发生变化,就能得到同样的结果 C。比如下面代码中的函数就是不可预测的:

function getTime() { 
  return new Date().getTime() 
} 
function getDom(id)

你可能感兴趣的:(前端进阶学习笔记)