понял, есть два варианта работы со стейтами:
1) Простые (назову из плоские) дата классы:
data class MyState(
val myName: String = "",
val myList: List<String> = emptyList()
)
class MyViewModel() {
var state by mutableStateOf(MyState())
init {
// Начальное состояние
state = MyState(myName="asdasd", myList=listOf("asd","asd")
....
// Если надо изменить что-то в стейте
state = state.copy(myName = "123123")
}
}
2) Стейт классы с наблюдаемыми полями (observable)
class MyState() {
var myName by mutableStateOf("")
var myList by mutableStateOf<List<String>>(emptyList())
}
class MyViewModel() {
var state by mutableStateOf(MyState())
init {
// Начальное состояние
state = MyState().apply {
myName = "asdasd"
myList = listOf("sadasda")
}
....
// Если надо изменить что-то в стейте
state.myName = "123123"
}
}
Код примерный.
Второй вариант используется в самом компоуз для состояний всяких компонентов - списков, пейджеров, итд.
Кто какой вариант использует. Есть ли какие-то рекомендации? Может есть продакш приложение как пример на Гитхабе, от того же Гугла , например
Можно пользоваться только первым что я и делаю
data class MyState( val myName: String = "", val myList: List<String> = emptyList() ) а так не красивше ли?
там у мпня вроде также первый вариант напиан
я про форматирование)
ни имеет значения)
напишите подробнее, почему вы юзаете первый вариант
как сделать форматирование такое?
в настольной версии TG - Ctrl+Shift+M, в мобильной через выделение текста, Mono
Или завернуть текст в символы `. ``` для многострочного текста.
доки рекомендуют вроде как
само состояние не должно отвечать за его значения
я в том сообщении скопипастил и отформатировал исходный код автора, чтобы показать, что так выглядит красивше в чате.
мне нравится то что я во вьюмодели/компоненте пробрасываю простые сообщения Reducer-у, а в нем уже внутри описано как мутируется состояние исходя из сообщения, можно сразу несколько состояний поменять. Скоуп сужается до минимума. Меньше кода, если состояния сложности средней или высокой (много полей) и нужно сразу мутировать несколько подсостояний
это для Windows или Linux так? на macOS ⌃ ⇧ K
А как такое с Decompose/MVI-Kotlin сделать? Где этот MutableState хранить? А то я так и не понял, как правильно работать с каким-нибудь TextField или Slider
Ну либо в StoreFactory либо в Component
Есть же пример, как раз со всем перечисленным https://github.com/JetBrains/compose-jb/blob/master/examples/todoapp/common/main/src/commonMain/kotlin/example/todo/common/main/integration/TodoMainComponent.kt
Спасибо 😊 буду смотреть
а еще может быть такое, когда нужно комбинировать несколько флоу или мерджить их
да, например поиск ( текст + чекбокс)
Да вроде текст и чекбокс оба в сторе были бы)
смотри нужно реализовать лайв серч фильма, сервер принимает текст и тип фильма, один флоу передает текст, другой тип фильма
Обсуждают сегодня