LaunchedEffect khởi chạy coroutine cho tác vụ bất đồng bộ. DisposableEffect dùng để thiết lập và dọn dẹp resource với một cleanup block (như event listener). SideEffect chạy sau mỗi lần recomposition, không có tham số, hiếm khi dùng (chủ yếu cho logging).
Dùng LaunchedEffect cho load data, DisposableEffect cho resource, và tránh SideEffect trong hầu hết trường hợp.
LaunchedEffect launches a coroutine scope for async operations. DisposableEffect is for setting up and cleaning up resources with a cleanup block (like event listeners). SideEffect runs after every recomposition with no parameters and is rarely used (mostly for logging).
Use LaunchedEffect for data loading, DisposableEffect for resources, and avoid SideEffect in most cases.