
# 管理页面级数据源、全局状态
#### 使用说明
页面组件之间，可以通过配置事件和动作进行信息交互。当页面组件较多，且需要进行信息交互时，频繁的给每个组件去定义事件或动作就比较繁琐了。此时，可以通过定义全局状态，来实现页面级所有组件中数据信息的更新。
低代码平台高级页面支持设置全局状态，通过页面级内存方式共享数据，即采用集中式存储管理页面所有组件的状态，并以相应的规则保证状态以一种可预测的方式发生变化。简单的理解就是全局状态，可理解为页面中所有组件的共享状态，不管组件在页面的哪个位置或层级，任何组件都能获取状态或触发状态改变的动作。全局状态相当于全局变量，属性是私有的，需要在组件的js文件中，使用预置的"this.$mstore.dispatch"方法，来修改状态数据。
**思考**：什么情况下，应该使用全局状态？
**解惑**：当页面组件构成比较简单，组件间不需要频繁的进行信息交互时，不需要设置全局状态。反之，则建议使用全局状态，通过设置并使用全局状态，可以帮助您管理页面所有组件的共享状态。
#### 操作步骤
1. 参考[登录经典应用设计器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_5025.html)中操作，登录经典版应用设计器。
2. 在高级页面开发界面，单击右上角的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284181.png)，定义全局状态。
   
   定义全局状态使用JavaScript编程语言，不支持TypeScript。全局状态结构固定以MStore命名，每个页面仅包含一个全局状态实例，方便在组件调试的过程中轻易地取得整个当前页面状态的快照。全局状态的结构定义由以下三部分组成：
   - state：定义页面所有组件的初始状态数据，即页面中所有组件共享状态的初始数据源。
   
   - mutations：状态变更的唯一方法是提交mutation。mutation以声明方式将state变化映射到视图。每次state的变更都需要定义一个mutation。mutation使用对象风格的提交方式，整个对象都作为载荷（payload）传给mutation函数。mutation都是同步事务。
   
   - actions：通过actions执行状态数据变更，用于衔接state和mutation。Action可以包含任意异步操作。通常用于绑定状态和组件。可以调用服务。
   
   
   
   
3. 在页面的组件js文件中，使用预置的"this.$mstore.dispatch（）"方法，修改状态数据。 
   系统还预置了onStateChanged(state) 方法，用于监听属性整个全局状态的变更。
   
   
 
