当我使用 CompositionLocal 时,我从父级获取数据并对其进行修改,但我发现它不会触发子级重组。
我已经成功更改了数据,这可以通过以下方式证明:当我在子可组合项中添加额外的状态,然后更改它以触发重组时,我可以获得新数据。
有人可以给我帮助吗?
代码如下
data class GlobalState(var count: Int = 0)
val LocalAppState = compositionLocalOf { GlobalState() }
@Composable
fun App() {
CompositionLocalProvider(LocalAppState provides GlobalState()) {
CountPage(globalState = LocalAppState.current)
}
}
@Composable
fun CountPage(globalState: GlobalState) {
// use it request recomposition worked
// val recomposeScope = currentRecomposeScope
BoxWithConstraints(
contentAlignment = Alignment.Center,
modifier = Modifier
.fillMaxSize()
.clickable {
globalState.count++
// recomposeScope.invalidate()
}) {
Text("count ${globalState.count}")
}
}
Run Code Online (Sandbox Code Playgroud)
我发现一个解决方法是使用currentRecomposable强制重组,也许有更好的方法,请告诉我。
android kotlin android-jetpack-compose composable compose-recomposition