Composable Function

DisposableEffect

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() }
        }
        // ...
    }
}