stringResource() вызывает перекомпоновку композиции
Я новичок в создании реактивного ранца. Я отлаживал рекомпозицию, но вдруг увидел необычную рекомпозицию в функции создания заголовка при запуске приложения. Я узнаю причину или виновника рекомпозиции, которую я использовал в функции составления заголовка для получения строкового текста с помощью stringResource(). Если я использую context.getString() или строковое значение жесткого кода вместо stringResource(), тогда я не получил никакой рекомпозиции.
Этот код при показе рекомпозиции
@Composable
fun MainScreen() {
Header()
}
@Composable
fun Header() {
Text(
text = stringResource(id = R.string.app_name)
)
}
Но если я использую эти коды, больше никакой перекомпоновки. Но почему?
@Composable
fun MainScreen() {
Header()
}
@Composable
fun Header() {
val context = LocalContext.current
Text(
text = context.getString(R.string.app_name)
)
}
Итак, что я могу сделать, чтобы избавиться от рекомпозиции при использовании stringResource() в функциях компоновки
1 ответ
Прежде всего, такого поведения быть не должно, я рекомендую создать чистый проект и повторить попытку.
Но... чтобы избежать перекомпоновки внутри Composable,Effect
API было бы полезно:
val context = LocalContext.current
var appName = ""
LaunchedEffect(Unit) {
appName = context.getString(R.string.app_name)
}
Text(
text = appName
)
Коды внутриLaunchedEffect
блок выполняется только один раз, даже если происходит перекомпоновка. Документация побочных эффектов API