在过去,调用resources.getString()
之类的东西是一个代价高昂的操作。在jetpack compose方面,以及如何避免在每次重新组合/调用compose函数时调用stringResource()
,这仍然是正确的吗?如何重载函数,以便不必为每个函数调用调用stringResource()
?
例如我有一个compose函数
@Composable
fun ButtonText(
text: String,
) {
Text(
text = text.uppercase(Locale.getDefault()),
textAlign = TextAlign.Center,
style = Typography.button
)
}
我从另一个compose函数调用它,但这里我们只是预览一下
@Preview
@Composable
fun ButtonTextPreview() {
Surface {
ButtonText(text = stringResource(id = R.string.button_example))
}
}
据我所知,每次外部compose函数将被重新组合时,ButtonText()
将被调用,其中stringResource()
也将被调用。
1条答案
按热度按时间b1zrtrql1#
为了避免这些不必要的重新组合,最好的办法是状态提升。请参考文档以获得深入的解释,但在这种情况下的解决方案是将字符串作为参数接收,而不是将其称为in-Composable。因此,当这个Composable重新组合时,将不需要一遍又一遍地获取它。把它一直吊到最有效的地方。