在 Composable 中获取之前的状态值 - Jetpack Compose

时间:2021-06-02 08:53:38

标签: android android-jetpack android-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 中获取代码的先前值?
我想知道 React Native 中是否有类似 componentDidUpdate 的东西

1 个答案:

答案 0 :(得分: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
    }
}