angular - 流的映射,我应该改变主流吗?
问题描述
在服务内部,我从服务器获取数据并将其推送到流中:
public rights$ = new BehaviorSubject([]);
public users$ = new BehaviorSubject([]);
.subscribe((res => {
this.rights$.next(res.rights);
this.users$.next(res.users);
});
我这样做是为了在某些应用程序的地方共享初始数据。但在一个地方我需要映射this.users$
到UserUI
输入:
interface UserUI {
checked: boolean;
date: Date
}
我应该像在同一个服务核心中一样创建一个新流吗?
public users$ = new BehaviorSubject<User[]>([]);
public usersUI$ = new BehaviorSubject<UserUI[]>([]);
映射:
this.usersUI$ = this.users$.pipe(map((users: User[]) => users.map((user: User) => {..user, checked: true, date: new Date})
或者更好地在我需要的地方进行映射this.usersUI$
?最佳做法是什么?
解决方案
它是一种重复,它会影响性能,你将不得不处理 2 个 observables 而不是一个你根本不需要的 observables,这意味着更多的代码,更多的测试要编写。
我建议您只保留一个users$,在需要调整的地方可以在组件级别进行所以创建共享适配器
userAdapter(user: User): UserUI {
return {...user, checked: true, date: new Date}
}
并取决于组件中的需求
const usersUI = service.users$.pipe(
map((users: User[]) => users.map(u => userAdapter(u)))
)
推荐阅读
- android - How to show Alert Dialog when the activities are in transition phase from one activity to another?
- c# - 如何处理 WPF 中的拖放?
- postgresql - 刷新物化视图产生错误:无法创建唯一索引
- docker - Hazelcast:无法加入集群。立即关闭
- ruby - rubocop 缩进多行赋值规则
- c++ - 异步操作的 Asio 处理程序不会被调用,而它们的同步对应物工作正常
- google-app-engine - 配置 Google App Engine 以提供 JS 客户端应用程序
- java - 迁移 androidX 后无法实例化片段 com.google.android.gms.maps.SupportMapFragment
- ios - Xcode Playground 使用简单的 UITableViewController 代码崩溃
- pytorch - 如何在 PyTorch 中使用 autograd.gradcheck?