# Control Recomposition

> Why the Menu can skip recomposition: stability and strong skipping.

- URL: https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-03-control-recomposition-with-stable-state
- Course: [Mobile Action Pro](https://dantech.academy/en/courses/kotlin-accelerator.md)
- Module: Compose UI from State
- Duration: 8 min
- Difficulty: beginner
- Access: Enrolled students
- Tiếng Việt: https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-03-control-recomposition-with-stable-state.md

## Objectives

- Know that strong skipping compares stable params with equals() and unstable params by identity
- Read the Menu's stability contract and explain why ImmutableList is enough for the compiler to infer stable
- Tell apart the two filters that block unneeded recomposition: distinctUntilChanged on the Flow and skipping in the Composable

## In this lesson

1. Lesson Goal
2. Part 1: Skipping Decides Which UI Doesn't Need Redrawing
3. Part 2: The Menu's Stability Contract
4. Part 3: One State Change Passes Two Filters
5. Checkpoint
6. Bad Smells
7. Cheat Sheet: @Stable And @Immutable
8. References
9. Key Takeaways

## Study with an AI agent

The full lesson is for students of this course. Students open the lesson on the web and press **Markdown** to copy all of it, then paste it into Claude, ChatGPT, Cursor or whichever agent you use. Faster: mint a token at `/profile/ai-agents` and your agent reads lessons over MCP.

- [Join the course](https://dantech.academy/en/kotlin-accelerator/checkout)

---

- Previous lesson: [Manage User Intent With Sealed Actions](https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-02-model-user-intent-with-sealed-actions.md)
- Next lesson: [Build A Compose Screen From State](https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-04-compose-screens-from-state.md)
