derivedStateOf

Function

Common
@StateFactoryMarker
public fun <T> derivedStateOf(calculation: () -> T): State<T>

Creates a State object whose State.value is the result of calculation. The result of calculation will be cached in such a way that calling State.value repeatedly will not cause calculation to be executed multiple times, but reading State.value will cause all State objects that got read during the calculation to be read in the current Snapshot, meaning that this will correctly subscribe to the derived state objects if the value is being read in an observed context such as a Composable function. Derived states without mutation policy trigger updates on each dependency change. To avoid invalidation on update, provide suitable SnapshotMutationPolicy through derivedStateOf overload.

Parameters

calculationthe calculation to create the value this state object represents.
Common
@StateFactoryMarker
public fun <T> derivedStateOf(policy: SnapshotMutationPolicy<T>, calculation: () -> T): State<T>

Creates a State object whose State.value is the result of calculation. The result of calculation will be cached in such a way that calling State.value repeatedly will not cause calculation to be executed multiple times, but reading State.value will cause all State objects that got read during the calculation to be read in the current Snapshot, meaning that this will correctly subscribe to the derived state objects if the value is being read in an observed context such as a Composable function.

Parameters

policymutation policy to control when changes to the calculation result trigger update.
calculationthe calculation to create the value this state object represents.

Code Examples

DerivedStateSample

@Suppress("CanBeVal", "unused")
@Composable
fun DerivedStateSample() {
    @Composable
    fun CountDisplay(count: State<Int>) {
        Text("Count: ${count.value}")
    }
    @Composable
    fun Example() {
        var a by remember { mutableStateOf(0) }
        var b by remember { mutableStateOf(0) }
        val sum = remember { derivedStateOf { a + b } }
        // Changing either a or b will cause CountDisplay to recompose but not trigger Example
        // to recompose.
        CountDisplay(sum)
    }
}