Когда штат поднимается в JetPack Compose, как оно обновляет значение у родителя, хотя ничто не возвращается к нему от реAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Когда штат поднимается в JetPack Compose, как оно обновляет значение у родителя, хотя ничто не возвращается к нему от ре

Сообщение Anonymous »

фон
hi, я недавно нашел использование для мульти платформы Kotlin и Kotlin (KMP), , в котором используется JetPack Compose. Я довольно новичок в них обоих, но не программирование. Now the following code works fine for hoisting state, but I want to understand why, because I don't see how the Child is connected to the Parent.
Here's code that works, and updates count as it should:

Код: Выделить всё

@Composable
fun Parent() {
var count by rememberSaveable { mutableStateOf(0) }
Child(count, { count++ })
}

@Composable
fun Child(count, buttonPressed: () -> Unit) {
Text("Clicked $count times")
Button(onClick = buttonPressed, Modifier.padding(100.dp)) {
// if I do println("here"), the following Text() will only run once,
// so this part of the UI isn't rewritten on subsequent clicks
Text("Click to add")
}
}

@Composable
fun App() {
Parent()
}

fun main() = application {
Window(
onCloseRequest = ::exitApplication,
title = "MyProgramTitle",
) {
App()
}
}
Я ожидаю, что такие конструкторы будут работать при увеличении Count , но они этого не делают. Я удаляю дополнительный код для краткости:

Код: Выделить всё

Parent(increaseBy=0)

// Inside Child()...
Button(onClick = Parent(increaseBy=1))
В документах кнопка Composables Сказывает следующее:

»кнопки являются фундаментальными компонентами, которые позволяют пользователю запускать определенное действие."

, но это только вызывает пустое lambda. />

Код: Выделить всё

onClick< /code> говорит это: < /p>

«Функция, которую система вызывает, когда пользователь нажимает кнопку». Нет int 
или любой тип данных не передается. Он просто выводит единицу , и это определенно не вызывает Parent () с любыми аргументами. В его конструкторе нет параметров, но он все еще обновляет parent.count . Как????? Это поражает меня. A Lambda: Buttonpressed: () -> Unit , просто требуется для сброса этого теста, даже если он пуст ... этот тест у ребенка затем пузырится и видит, что у него есть переменная, которую он, возможно, должен изменить: «Текст» («Clicked $ Count Times») , и что у нее есть родитель, который его называл, так что он отступает в родительском языке из -за ребенка (Count {Count ++) Если это так, это поражает меня, почему они не позволят вам сделать что -то вроде кнопки (OnClick = Parent (ingisionBy = 1)) < /code>. Это было бы намного проще и менее запутанно, но, опять же, я помню, как читал что -то о том, как дела в этом пути было преднамеренным, поэтому код был легче поддерживать (единственный источник истины, общей, перехватываемой, разъединенного и т. Д.).
Так я прав?? Как обновлять счет ?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -in-the-pa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»