Выбор ответа Junior Compose: состояние и side-effects спрашивают часто обновлено
mutableStateOf без remember
Вопрос
Что не так с кодом? Счётчик всегда показывает 0.
@Composable
fun Counter() {
var count by mutableStateOf(0)
Button(onClick = { count++ }) { Text("$count") }
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Без remember состояние создаётся заново при рекомпозиции и снова равно 0. Клик меняет состояние и запускает рекомпозицию, но при повторном вызове функции mutableStateOf(0) создаёт новое состояние с нулём. remember { mutableStateOf(0) } сохраняет объект между рекомпозициями.
Варианты ответа
mutableStateOfнельзя использовать с примитивами вродеInt, нуженmutableIntStateOfcount++не работает с делегатомby: инкремент меняет копию, а не самStateButtonне вызывает рекомпозицию родителя, пока у него нет своего состояния- Без
rememberсостояние создаётся заново при рекомпозиции и снова равно 0правильный ответ
Разбор
Клик меняет состояние и запускает рекомпозицию, но при повторном вызове функции mutableStateOf(0) создаёт новое состояние с нулём. remember { mutableStateOf(0) } сохраняет объект между рекомпозициями. С Int и by всё работает, Lint даже подсвечивает эту ошибку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.