为什么说 "Calls to launch should happen inside a LaunchedEffect and not composition"?

Why it says "Calls to launch should happen inside a LaunchedEffect and not composition"?

我是 jetpack compose 的新手,我尝试构建小项目来学习 jetpack compose,我有示例代码,并且

composableScope.launch 

它抛出一个错误,因为启动调用应该发生在 LaunchedEffect 内部,而不是 launch 的组合,知道吗?

 val composableScope = rememberCoroutineScope()
    val currentPage = onBoardViewModel.currentPage.collectAsState()

Scaffold(
        modifier = Modifier.fillMaxSize(),
        scaffoldState = scaffoldState
    ) {
        Surface(
            modifier = Modifier.fillMaxSize()
        ) {
            composableScope.launch {
                pagerState.animateScrollToPage(
                    page = currentPage.value
                )
            }
}
}

您不能直接在“组合”(您声明 UI 的 Composable 函数中的位置)中调用协程,因为这个函数可以随时被多次调用编写框架。

相反,如果您想在组合过程中调用协程,则应使用 LaunchedEffect(阅读更多内容 here)。或者,如果您需要在事件(如点击)中使用协程,则应使用 rememberCoroutineScope.

LaunchedEffect(someKey) { // the key define when the block is relaunched
    // Your coroutine code here
}

Modifier.clickable {
    coroutineScope {
        // your coroutine here
    }
}