Skip to content

Instantly share code, notes, and snippets.

@ycmjason
Created April 27, 2024 23:55
Show Gist options
  • Save ycmjason/0d988d6d1f1b22ad5995bdff0614f1de to your computer and use it in GitHub Desktop.
Save ycmjason/0d988d6d1f1b22ad5995bdff0614f1de to your computer and use it in GitHub Desktop.
A composable that allow particular block to be rerendered manually
@Composable
fun <T> rerenderable(
beforeRerender: () -> Unit = {},
block: @Composable (rerender: () -> Unit) -> T,
): () -> Unit {
var id by remember { mutableStateOf(0) }
val rerender = {
beforeRerender()
id += 1
}
key(id) { block(rerender) }
return rerender
}
// Example
@Composable
fun SomeComponent() {
val values = ...
rerenderable(beforeRerender = { values = INITIAL_VALUES }) { rerender ->
MyFormLayout(
values = formValues,
onValuesChange = { ... },
onSubmit = {
doSomething()
rerender()
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment