# Kiểm Soát Recomposition

> Vì sao Menu skip được recomposition: stability, strong skipping.

- URL: https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-03-control-recomposition-with-stable-state
- Khóa học: [Mobile Action Pro](https://dantech.academy/courses/kotlin-accelerator.md)
- Module: Compose UI Theo State
- Thời lượng: 8 phút
- Độ khó: beginner
- Truy cập: Dành cho học viên
- English: https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-03-control-recomposition-with-stable-state.md

## Mục tiêu

- Biết strong skipping so sánh param stable bằng equals() và param unstable bằng identity
- Đọc được stability contract của Menu và giải thích vì sao ImmutableList đủ để compiler suy luận ra stable
- Phân biệt hai lớp lọc chặn recomposition thừa: distinctUntilChanged ở Flow và skipping ở Composable

## Nội dung bài học

1. Mục Tiêu Bài Học
2. Phần 1: Skipping Quyết Định UI Nào Không Cần Vẽ Lại
3. Phần 2: Stability Contract Của Menu
4. Phần 3: Một Lần Đổi State Đi Qua Hai Lớp Lọc
5. Checkpoint
6. Bad Smells
7. Bảng Ghi Nhớ: @Stable và @Immutable
8. Tham Khảo
9. Điều Cần Nhớ

## Học cùng AI agent

Toàn bộ bài học dành cho học viên của khóa. Học viên mở bài trên web và bấm nút **Markdown** để copy toàn bài, rồi dán vào Claude, ChatGPT, Cursor hoặc agent bạn đang dùng. Nhanh hơn: tạo token ở `/profile/ai-agents` và agent đọc bài trực tiếp qua MCP.

- [Đăng ký khóa học](https://dantech.academy/kotlin-accelerator/checkout)

---

- Bài trước: [Quản lý User Intent Bằng Sealed Actions](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-02-model-user-intent-with-sealed-actions.md)
- Bài tiếp theo: [Dựng Screen Compose Từ State](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-04-compose-screens-from-state.md)
