SUI组件的状态管理 
SUI组件的状态有两种:一种是组件本身的状态,一种是组件之间的状态。
组件本身的状态管理使用store对象,用于存储当前组件状态,每一个组件都有自己的store,并且使用了html自定义属性进行状态的保存。
注意:页面刷新后store 状态会丢失。
组件之间的状态管理使用state对象,用于传递组件间状态变化的状态。
state状态管理 
state状态管理主要是为了在不同组件之间进行通信。每一个组件初始化后都会监听state:change事件。当用户调用目标组件的state->Set方法时,会触发此组件的state:change事件,并且事件默认情况下会不断的向上传传递,当前组件state:change响应->上级组件state:change响应。
比如现在有两个组件:Select与Dropdown,两个是父子关系。
Select组件是一个下拉框组件,Dropdown组件是一个下拉框的下拉列表组件。
Select组件的html代码如下:
html
<select s:on-click="onActionClick">
  <Dropdown> </Dropdown>
</select>先给Dropdown加上状态监听处理,比如这里监听opened状态的变化,当opened状态为true时,打开Dropdown组件,否则关闭Dropdown组件。
dropdown.ts:
ts
const self = this as Component;
self.watch = {
  opened: (value: boolean) => {
    if (value) return open();
    return close();
  }
};
function open() {
  self.store.Set('opened', 'true');
  self.$root.removeClass('hidden');
}
function close() {
  self.store.Set('opened', 'false');
  self.$root.addClass('hidden');
}Select组件的ts代码如下,当用户点击Select组件时,会调用onActionClick方法,这个方法会调用toggleDropdown方法, 此方法会查找dropdown组件,并把它的opened状态设置成true或是false。
select.ts:
ts
self.onActionClick = (event: Event, data: EventData, detail: EventDetail) => {
  toggleDropdown();
};
function toggleDropdown() {
  const opened = self.store.Get('opened') == 'true' ? true : false;
  const dropdown = self.root.querySelector(`[name="options"]`) as HTMLElement;
  $$(dropdown).state.Set('opened', !opened);
}整个过程是这样的:
- 用户点击Select组件,会调用onActionClick方法,这个方法会调用toggleDropdown方法。
 - toggleDropdown方法会查找dropdown组件,并把它的opened状态设置成true或是false。
 - dropdown组件的opened状态发生变化,会触发dropdown组件的
state:change事件,事件会向上传递,直到根节点。 - 如果目标组件中在watch函数中监听了相关状态的变化,会执行相关的处理逻辑。
 
详细的流程如下: