The Composable Architecture(TCA)为构建复杂且可测试的功能提供了一套架构方案,其手段是可组合的 reducer、集中式状态管理和副作用处理。核心原则是:以清晰的依赖关系和可测试的副作用,实现可预测的状态演进。
用途 该技能用于在使用 TCA 构建功能时提供指导,包括组织 reducer、管理状态、处理副作用、导航以及测试 TCA 功能。
主要能力与参考主题 资料提供了一份参考加载指南,建议在即使只有很小概率需要相关内容时也始终加载参考文件,以便拥有上下文,避免遗漏模式或犯错。参考主题及其加载时机如下:
- Reducer 结构:创建新 reducer、设置 @Reducer、State、Action 或 @ViewAction 时。
- 视图 - 绑定:使用 @Bindable、双向绑定、store.send() 或 .onAppear/.task 时。
- 视图 - 组合:使用带 store 的 ForEach、作用域到子功能或可选子项时。
- 导航 - 基础:设置 NavigationStack、路径 reducer、push/pop 或程序化 dismiss 时。
- 导航 - 进阶:深度链接、递归导航或将 NavigationStack 与 sheet 结合时。
- 共享状态:使用 @Shared、.appStorage、.withLock 或在功能间共享状态时。
- 依赖:创建 @DependencyClient、使用 @Dependency 或设置测试依赖时。
- 副作用:使用 .run、.send、.merge、定时器、副作用取消或异步工作时。
- 展示:使用 @Presents、AlertState、sheet、popover 或 Destination 模式时。
- 测试 - 基础:设置测试套件、makeStore 辅助方法或理解 Equatable 要求时。
- 测试 - 模式:测试 action、状态变化、依赖、错误或展示时。
- 测试 - 进阶:使用 TestClock、keypath 匹配、exhaustivity = .off 或基于时间的测试时。
- 测试 - 工具:测试数据工厂、LockIsolated、ConfirmationDialogState 测试或 @Shared 测试时。
- 性能:优化状态更新、高频 action、内存或 store 作用域时。
常见错误 资料列出了以下常见错误:
- 过度模块化功能:将功能拆分为过多小 reducer 会使状态管理更难,并增加组合开销。除非确实需要复用,否则应保持相关状态和 action 在一起。
- 副作用生命周期管理不当:状态变化时忘记取消副作用会导致数据陈旧、重复请求或竞态条件。对顺序副作用使用 .concatenate,并在适当时使用 .cancel。
- 导航状态放置错误:将导航状态放在子 reducer 而非父 reducer 中,会导致不必要的视图重载和状态不一致。导航状态应属于拥有导航结构的功能。
- 测试时忽略 TestStore 穷尽性:对“简单”副作用或“明显”状态变化跳过 TestStore 断言会遗漏 bug。应严格使用穷尽性检查,它能及早发现回归。
- 错误地混用 async/await 与 Effects:在没有适当取消或错误处理的情况下将 async/await 转换为 .run 副作用,会丢失隔离保证。应使用 yield 语句将异步操作小心地包装在 .run 中。
适用场景 适用于使用 TCA 构建功能、组织 reducer、管理状态、处理副作用、导航或测试 TCA 功能的开发场景。
限制 资料未提供关于收费、价格、平台或具体使用步骤的更多信息。