Size: a a a

Programming Offtop

2020 August 15

Д

Денис in Programming Offtop
хотя в принципе в зависимости от месседжа можно понять что нужно вызвать редусер компонента, верно?
источник

IK

Igor Komarov in Programming Offtop
Денис
Можете подсказать как работать с какими то кастомными компонентами? в плане хотелось бы инкапсулировать логику и там в отдельным модуль обернуть все это дело..

К примеру взять компонент: кнопка меняющая свой цвет по клику на ней. там наверное должен быть свой редусер, но как в него прокинуть месседж если основной редусер экрана не знает о том, какие компоненты на экране присутствуют?
Вытащить наружу апи для смены цвета, и respect scalability
источник

AS

Andrei Shikov in Programming Offtop
Денис
хотя в принципе в зависимости от месседжа можно понять что нужно вызвать редусер компонента, верно?
Зависит от того, как реализован компонент
Можно в него прокидывать же мессаджи

А так, обычно строится дерево, у которого суть в том, что нода родитель (экран) знает о детях (кнопка), но не наоборот
Тогда кнопку можно положить в любой экран
источник

Д

Денис in Programming Offtop
fun mainReducer(currentState: State, msg: Msg): State {
   return when (msg) {
       is ComponentMessage -> {
           componentReducer(currentState, msg)
       }
       else -> currentState
   }
}

как то так это должно выглядеть?
источник

Kd

Konstantin dmz9 in Programming Offtop
Денис
Можете подсказать как работать с какими то кастомными компонентами? в плане хотелось бы инкапсулировать логику и там в отдельным модуль обернуть все это дело..

К примеру взять компонент: кнопка меняющая свой цвет по клику на ней. там наверное должен быть свой редусер, но как в него прокинуть месседж если основной редусер экрана не знает о том, какие компоненты на экране присутствуют?
никак, не надо их переписывать в такую архитектуру
источник

Д

Денис in Programming Offtop
Konstantin dmz9
никак, не надо их переписывать в такую архитектуру
а как это должно работать?
источник

Kd

Konstantin dmz9 in Programming Offtop
Денис
а как это должно работать?
как все остальные компоненты юи
источник

Kd

Konstantin dmz9 in Programming Offtop
архитектуру вряд ли ты перенесешь на другой проект а вот юи компоненты наработаные - да
источник

Д

Денис in Programming Offtop
fun mainReducer(currentState: MainState, msg: Msg): State {
   return when (msg) {
       is ComponentMessage -> {
           currentState.copy(
               componentState = componentReducer(currentState, msg)
           )
       }
       else -> currentState
   }
}

как то так получается, вынести состояние компонента полностью в отдельный класс и отдельные месседжи и редусер для компонента сделать, и можно выносить в либу
источник

Д

Денис in Programming Offtop
единственное только что нужно во всех редусерах что принимают сообщения данного компонента реализовывать
is ComponentMessage -> {
           currentState.copy(
               componentState = componentReducer(currentState, msg)
           )
       }

что не очень удобно
источник

Д

Денис in Programming Offtop
замкнутой системы из компонента такого не получится
источник

AD

Aleksey D. in Programming Offtop
Денис
fun mainReducer(currentState: MainState, msg: Msg): State {
   return when (msg) {
       is ComponentMessage -> {
           currentState.copy(
               componentState = componentReducer(currentState, msg)
           )
       }
       else -> currentState
   }
}

как то так получается, вынести состояние компонента полностью в отдельный класс и отдельные месседжи и редусер для компонента сделать, и можно выносить в либу
а как ты команды будешь таким редьюсером исполнять?
источник

Д

Денис in Programming Offtop
пардон, редусер должен возвращать State + Cmd
источник

Д

Денис in Programming Offtop
но не суть
источник

AD

Aleksey D. in Programming Offtop
Денис
замкнутой системы из компонента такого не получится
замкнутая - это когда у компонента есть набор публичных мессаджей
и твой внешний кто-то превращает свои мессаджи в публичные мессаджи компонента
источник

AD

Aleksey D. in Programming Offtop
а тебе компонент может через слушатель предоставить свой стейт
источник

Д

Денис in Programming Offtop
меня больше волнует что кто то может подменить редусер компонента на другой, что вроде как гибкость но вроде как и нахер надо такое
источник

AD

Aleksey D. in Programming Offtop
ты ему - мессадж, он тебе - когда-нибудь обновленный стейт
источник

AD

Aleksey D. in Programming Offtop
учиться вкладывать стейты - это уже к Аркадию и его MVICore)
источник

AI

Arkadii Ivanov in Programming Offtop
Денис
Можете подсказать как работать с какими то кастомными компонентами? в плане хотелось бы инкапсулировать логику и там в отдельным модуль обернуть все это дело..

К примеру взять компонент: кнопка меняющая свой цвет по клику на ней. там наверное должен быть свой редусер, но как в него прокинуть месседж если основной редусер экрана не знает о том, какие компоненты на экране присутствуют?
Каждый компонент должен иметь свой фасад. Допустим фрагмент. Смена цвета по клику - это детали реализации. А события снаружи можно передать например как Observable<Input> в конструктор фрагмента. Также и Consumer<Output>. Ну или Flow можно использовать
источник