@HiltViewModel
class ForYouViewModel @Inject constructor(
private val getTopicsUseCase: GetTopicsUseCase,
private val getNewsUseCase: GetNewsUseCase
) : BaseViewModel<ForYouState, ForYouEvent, ForYouEffect>(
initialState = ForYouState.initial(),
reducer = ForYouScreenReducer()
) {
init {
// Get data via UseCases
}
fun onTopicClick(topicId: String) {
sendEffect(
effect = ForYouEffect.NavigateToTopic(
topicId = topicId
)
)
}
}
@Composable
fun MyScreen(viewModel: MyViewModel) {
LaunchedEffect(Unit) {
viewModel.loadData() // 재구성 시마다 호출될 수 있음
}
}
⇒ Flow의 확장 함수 onStart + stateIn
onStart
“Returns a flow that invokes the given action before this flow starts to be collected.”
onStart는 Flow 컬렉션이 시작되기 전에 특정 동작을 수행할 수 있게 해준다.