@upcodee/viewmodel
Version:
View model is library for MVVM architecture for React apps using Mobx and RxJS
32 lines (25 loc) • 696 B
text/typescript
import {Observable, Subscription} from "rxjs";
import {useEffect} from "react";
export interface ViewModel {
dispose(): void
}
export class ViewModelScope {
private subscription: Subscription
constructor() {
this.subscription = new Subscription()
}
launchInside<T>(observable: Observable<T>) {
this.subscription.add(observable.subscribe(_ => { }, _ => { }, () => { }))
}
dispose(): void {
this.subscription.unsubscribe()
}
}
export const useScopedViewModel = <T extends ViewModel>(viewModel: T) => {
useEffect(() => {
return function cleanup() {
viewModel.dispose()
}
}, [])
return viewModel
}