Button(text = 'asdasd', onClick = {
                  
                  
                          SideEffect {
                  
                  
                              Log.d(sadasdd)
                  
                  
                          }
                  
                  
                      }
                  
                  
                  }
                  
                  
                  Log.d - сайд эффект. Если теперь в сигнатуру функции вынесем onClickButton:
                  
                  
                  
                  
                  
                  @Composable
                  
                  
                  fun Button(
                  
                  
                     onClickButton: () -> Unit = {},
                  
                  
                  ) {
                  
                  
                      Button(text = 'asdasd', onClick = onClickButton)
                  
                  
                  }
                  
                  
                  
                  
                  
                  И где-нибудь эта функция вызывается с viewModel.onClickButton:
                  
                  
                  
                  
                  
                  @Composable
                  
                  
                  fun Screen() {
                  
                  
                     var viewModel = viewMode()
                  
                  
                     Button(onClickButton = viewModel::onClickButton)
                  
                  
                  }
                  
                  
                  
                  
                  
                  class MyViewModel {
                  
                  
                  
                  
                  
                    fun onClickButton() {
                  
                  
                      Log.d('asdasdasd')
                  
                  
                    }
                  
                  
                  
                  
                  
                  }
                  
                  
                  То есть тут, при нажатию на кнопку вызывается уже метод во вьюмодели без сайд эффекта. Это верно?
                  
                  
                
да, кликлистенеры не участвуют в рекомпозиции
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Получается и эту функцию : @Composable fun Button() { Button(text = 'asdasd', onClick = { SideEffect { Log.d(sadasdd) } } } можно писать без блока SideEffect ?
а оно и не даст скомпилировать
а там и не нужно SideEffect
Обсуждают сегодня