用途:帮助判断 Jetpack Compose 中某个值是否应使用 derivedStateOf。derivedStateOf 产生的 State 只在派生结果变化时使读取方失效,即使输入状态变化更频繁;因此仅当输入频率高于输出频率时才适用,其他形态只是多一层快照订阅、没有过滤收益。
主要能力:识别适用场景(滚动位置驱动布尔值、高频输入映射为低频输出、已有 derivedStateOf 但重组次数未下降或值不再更新);识别不适用场景(状态读取处于错误阶段、诊断参数稳定性、输入与输出频率相同);避免按初始值捕获的经典陷阱。
使用方式:先写出输入状态与 UI 实际消费值及各自更新频率,再比较频率;用 remember { derivedStateOf { … } } 包裹,裸写会在每次组合时重建;lambda 捕获的非状态变量(参数、局部变量、props)必须作为 remember 的 key,否则会冻结首次组合的值;一次性副作用(日志、埋点、Snackbar)优先用 LaunchedEffect 中的 snapshotFlow { … }.collect { … };用 Layout Inspector 或 @TraceRecomposition 验证重组次数只在派生结果变化时增加。
适用场景:滚动到顶部显示 FAB、价格分桶等输入远多于输出的派生。
限制:输入与输出频率相同时不应使用;不要为保险把 collectAsState() 结果再包一层 derivedStateOf;阶段问题需先处理状态读取延迟,derivedStateOf 无法解决。需 Compose runtime ≥ 1.0。