这种常见的 rxjs 状态管理模式有名称吗?它有限制吗?
Is there a name to this common state manegement pattern with rxjs? Does it have limitations?
在 Angular 应用程序中,我们通常会这样做来管理共享状态:
import { BehaviorSubject } from 'rxjs';
interface User {
id: number;
}
class UserService {
private _users$ = new BehaviorSubject([]);
users$ = this._users$.asObservable();
deleteUser(user: User) {
const users = this._users$.getValue();
this._users$.next(users.filter(user => user.id !== user.id));
}
addUser(user: User) {
const users = this._users$.getValue();
this._users$.next([...users, user]);
}
updateUser(updatedUser: User) {
const users = this._users$.getValue();
this._users$.next(users.map(user => user.id === updatedUser.id ? updatedUser : user));
}
}
这基本上解决了同样的问题,从根本上说,基于 Flux 和基于 Redux 的模式(比如 ngRx 和 redux 本身)试图解决:我们如何更新共享状态,以便视图组件可以对变化做出反应,将能够显示真实的当前状态。但它比那些模式更简单。
我的问题是:这个模式有一个已知的名字吗?我们在使用像 ngRx(或者甚至是 React 中的 redux)这样的库来覆盖这种模式的任何限制方面有什么优势吗?
这是一个有效的模式,这也是我们引入 ngrx/component-store (https://ngrx.io/guide/component-store) 的原因。
文档还提供了 pro/cons 两种“方式”:https://ngrx.io/guide/component-store/comparison
在 Angular 应用程序中,我们通常会这样做来管理共享状态:
import { BehaviorSubject } from 'rxjs';
interface User {
id: number;
}
class UserService {
private _users$ = new BehaviorSubject([]);
users$ = this._users$.asObservable();
deleteUser(user: User) {
const users = this._users$.getValue();
this._users$.next(users.filter(user => user.id !== user.id));
}
addUser(user: User) {
const users = this._users$.getValue();
this._users$.next([...users, user]);
}
updateUser(updatedUser: User) {
const users = this._users$.getValue();
this._users$.next(users.map(user => user.id === updatedUser.id ? updatedUser : user));
}
}
这基本上解决了同样的问题,从根本上说,基于 Flux 和基于 Redux 的模式(比如 ngRx 和 redux 本身)试图解决:我们如何更新共享状态,以便视图组件可以对变化做出反应,将能够显示真实的当前状态。但它比那些模式更简单。
我的问题是:这个模式有一个已知的名字吗?我们在使用像 ngRx(或者甚至是 React 中的 redux)这样的库来覆盖这种模式的任何限制方面有什么优势吗?
这是一个有效的模式,这也是我们引入 ngrx/component-store (https://ngrx.io/guide/component-store) 的原因。
文档还提供了 pro/cons 两种“方式”:https://ngrx.io/guide/component-store/comparison