A side effect of composition that must be reversed or cleaned up if the [DisposableEffect] leaves the composition.
disposableEffectSample
fun disposableEffectSample() {
@Composable
fun UserProfile(userRepository: UserRepository, userRequest: UserDataRequest) {
var userDataState by remember { mutableStateOf<UserDataState>(UserDataState.Loading) }
// If either the repository or request change, we must cancel our old data fetch
// and begin a new data fetch. We will cancel the current data fetch if UserProfile
// leaves the composition.
DisposableEffect(userRepository, userRequest) {
val requestDisposable =
userRepository.fetchUserData(
userRequest,
onSuccess = { response -> userDataState = UserDataState.UserData(response) },
onError = { throwable ->
userDataState = UserDataState.Error(throwable.message)
},
)
onDispose { requestDisposable.dispose() }
}
// ...
}
}