Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
321 of 502 menu
◀ ▶

Функция derivedStateOf

Функция derivedStateOf создаёт State, значение которого считают из других состояний. Перерисовка случится только если результат лямбды реально изменился, а не при каждом чихе исходных данных. Вызов оборачивают в remember.

Синтаксис

val label by remember { derivedStateOf { if (count > 0) "12345" else "abcde" } }

Параметры

Параметр Описание
calculation Лямбда без аргументов. Внутри читают другие State и возвращают итоговое значение.

Пример

Давайте выведем подпись только когда счётчик больше нуля:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var count by remember { mutableIntStateOf(0) } val label by remember { derivedStateOf { if (count > 0) "12345" else "abcde" } } Button(onClick = { count++ }) { Text(text = "abcde") } Text(text = label) } } }

На экране текст сменится на "12345" после первого нажатия.

Пример

Давайте проверим чётность счётчика:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var count by remember { mutableIntStateOf(0) } val parity by remember { derivedStateOf { if (count % 2 == 0) "abcde" else "12345" } } Button(onClick = { count++ }) { Text(text = "abcde") } Text(text = parity) } } }

На экране строка будет чередовать "abcde" и "12345" при каждом нажатии.

Смотрите также

  • функция mutableStateOf,
    от которой зависит derivedStateOf
  • функция remember,
    где держат derivedStateOf
  • класс State,
    который возвращает производное значение
  • функция produceState,
    которая асинхронно обновляет State
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить