Получить предыдущее значение состояния в Composable - Jetpack Compose

предположим, что мой код выглядит так

@Composable
fun ExampleList() {
    val tickers by exampleViewModel.tickers.observeAsState()
    LazyColumn() {
        items(items = tickers) { ticker ->
            ExampleItem(ticker)
        }
    }
}
@Composable
fun ExampleItem(ticker: Ticker) {
    Text(text= ticker.lastPrice)
}

есть ли способ получить предыдущее значение тикера в ExampleItem Compose каждый раз, когда тикер обновляется?
Мне интересно, есть ли что-то вроде componentDidUpdate в React Native


person cuongtd    schedule 02.06.2021    source источник


Ответы (1)


Я понял, что могу получить последнее значение тикера, используя remember {mutableStateOf}, как показано ниже:

var lastTicker by remember { mutableStateOf(ticker)}

SideEffect {
   if (lastTicker != ticker) {
     // compare lastTicker to current ticker before assign new value
   
     lastTicker = ticker
   }
}

используя remember { mutableStateOf(ticker)}, я могу сохранить значение перекомпоновки тикера.

затем внутри SideEffect я могу использовать значение lastTicker (для сравнения последнего тикера и текущего тикера в моем случае), прежде чем назначить его новому значению для использования в следующей композиции

или используйте derivedStateOf только для просмотра изменения тикера, избегайте перекомпоновки

val compareValue by remember(ticker) {
    derivedStateOf {
        // compare lastTicker to current ticker before assign new value

        lastTicker = ticker
       // return value
    }
}
person cuongtd    schedule 02.06.2021