3. 提升状态到父组件:从子组件移除状态,父组件控制数据与事件
3.1 核心原理:单向数据流与状态所有权
状态提升(State Hoisting)是 Compose 中强制实施的架构模式,核心原则是:可变状态尽量保持在层级中最低的共同父组件中,子组件只通过参数读取数据、通过回调通知父组件变更。这一模式保证了数据流的可预测性和组件的可复用性。
关键概念:状态提升并非“禁止子组件拥有状态”,而是将有共享需求或影响父组件渲染的状态移动到父组件层级,子组件退化为“纯展示 + 事件上报”的无状态组件。
以下表格对比了状态在子组件内部管理与提升到父组件后的核心差异:
| 维度 | 状态在子组件内部 | 状态提升到父组件 |
|---|---|---|
| 数据所有权 | 子组件持有状态,外部无法控制 | 父组件持有状态,完全控制数据 |
| 组件复用性 | 低,状态绑定到具体子组件 | 高,子组件可被任意父组件使用 |
| 数据流向 | 仅子组件内部读写,无法跨层级 | 父→子单向参数传递,子→父事件上报 |
| 调试可追踪性 | 状态分散,难以追踪变更来源 | 状态集中,变更链路清晰 |
| 重组范围 | 状态变更仅重组当前子组件 | 父组件及相关子组件按需重组 |
下图展示了状态提升后的完整数据—事件闭环架构: