RxJS를 사용한 20줄 단순 저장
6755 단어 rxjstypescript
import { distinctUntilChanged, map } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
export abstract class Store<T> extends BehaviorSubject<T> {
constructor(initialState: T) {
super(initialState);
}
public dispatch(fn: (state: T) => T) {
this.next(fn(this.getValue()));
}
public select<R>(fn: (state: T) => R) {
return this.pipe(map<T, R>(fn), distinctUntilChanged());
}
public selectSync<R>(fn: (state: T) => R) {
return fn(this.getValue());
}
}
예: UserStore
import { User } from '../entity/user';
import { Store } from '../../store';
export interface State {
currentUser: User | null;
}
export class UserStore extends Store<State> {
constructor() {
super({
currentUser: null,
});
}
get currentUser$() {
return this.select(state => state.currentUser);
}
get currentUser() {
return this.selectSync(state => state.currentUser);
}
setCurrentUser(user: User) {
this.dispatch(state => ({
...state,
currentUser: user,
}));
}
}
Reference
이 문제에 관하여(RxJS를 사용한 20줄 단순 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lacolaco/20-lines-simple-store-with-rxjs-448p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)