Lammert Westerhoff
01/13/2021, 9:36 PMMainScopecomponentWillUnmountviewModelScopeturansky
01/13/2021, 11:37 PMuseEffectcleanupJobLammert Westerhoff
01/13/2021, 11:54 PMLammert Westerhoff
01/14/2021, 12:02 AMval users = functionalComponent<UsersProps> { props ->
    val (viewModelOutput, setViewModelOutput) = useState<UsersViewModel.Output?>(null)
    useEffectWithCleanup(emptyList()) {
        val job = mainScope.launch {
            props.viewModel.output.collect { output ->
                setViewModelOutput(output)
            }
        }
        return@useEffectWithCleanup {
            job.cancel()
        }
    }Lammert Westerhoff
01/14/2021, 12:03 AMclass UsersComponent: RComponent<UsersProps, UsersState>() {
    override fun componentDidMount() {
        job = mainScope.launch {
            props.viewModel.output.collect { output ->
                setState {
                    this.viewModelOutput = output
                }
            }
        }
    }
    override fun componentWillUnmount() {
        job?.cancel()
        job = null
    }turansky
01/14/2021, 12:24 AMLammert Westerhoff
01/14/2021, 1:03 AMturansky
01/14/2021, 1:45 AMGlobalScopeMainScopeLammert Westerhoff
01/14/2021, 1:52 AMelizarov
01/14/2021, 8:13 AMturansky
01/18/2021, 4:19 PMGlobalScopereactelizarov
01/20/2021, 8:00 AMMainScopeGlobalScopesteamstreet
05/18/2021, 10:27 PMankushg
05/28/2021, 1:27 AMturansky
05/28/2021, 11:27 AMelizarov
05/28/2021, 11:28 AMturansky
05/28/2021, 11:56 AMGlobalScopereactlanguageSettingselizarov
05/28/2021, 11:58 AMturansky
05/28/2021, 11:59 AMJobturansky
05/28/2021, 12:02 PMval user: User? by useState(null)
useEffect(id) {
    val job = GlobalScope.launch {
        user = Api.getUser(id)
    }
    // cleanup
    // on `id` change and on unmount
    job::cancel 
}elizarov
05/28/2021, 12:06 PMturansky
05/28/2021, 12:16 PMturansky
05/28/2021, 12:16 PMsimilar to Compose’s rememberCoroutineScopeIs it component scope or application scope?
steamstreet
06/03/2021, 9:18 PMJobsteamstreet
06/03/2021, 9:19 PMBest Practices for Coroutines in the Browsersteamstreet
06/03/2021, 9:20 PMturansky
06/03/2021, 11:55 PMinline fun useAsyncEffect(
    vararg dependencies: dynamic,
    suspend effect: () -> Unit,
) {
    useEffect(dependencies) {
        val job = GlobalScope.launch(effect)
        // cleanup
        job::cancel
    }
}