javascript - store.select 进入 constrcutor 和 Angular 6 之前的区别?
问题描述
在构造函数中选择 store 和之前有什么区别吗?
1) export class SomeClass {
myObservable$ = <Observable<MyObservableType>>this.store.select(fromReducers.getMyObservable);
constructor(
private store: Store<fromReducers.State>
) { }
}
2) export class SomeClass {
myObservable$ = Observable<MyObservableType>;
constructor(
private store: Store<fromReducers.State>
) {
this.myObservable$ = this.store.select(fromReducers.getMyObservable);
}
}
为什么在 ngrx/store应用程序示例中他们使用第二个变体?
解决方案
不同之处在于,在第一种情况下,它在类实例化期间请求数据,存在减慢所有 Web 应用程序初始化过程的风险,并存在破坏用户体验的风险。
长操作不应进入构造函数或变量声明。
最好的选择是将数据提取到ngOnInit
方法中。所有潜在的长时间操作都是一样的。
查看角度生命周期文档,以最深入地了解幕后发生的事情
在声明点初始化变量是一种很好的做法,但并不强制使用实际值初始化它们。通常,它们被初始化为 null,然后它们在构造函数中或构造函数之后获取它们的值,因为通过这种方式,您应该确保您可以依赖的所有其他变量都应该被实例化。
但这不是一个规则,这取决于你的班级做什么
推荐阅读
- sql - 如何获取带有 id 的表中的公共字段
- java - 批量分配不安全的活页夹配置 Rest 框架,JSON http 请求:我没有使用 Spring MVC
- python - 如何用白色窗口替换图像的一部分?
- php - 使用动态数据自动刷新 div
- cloudkit - ckWebAuthToken 使用 CloudKit Web 服务通过 postMessage 检索
- r - 如何在闪亮的模块化函数上使用 RenderUI?
- c# - AWS Lambda 中的空白环境变量
- javascript - 如何将存储在模型中的 json 数组绑定到 SAPUI5 中的列表控件?
- jquery - 如何在 post 方法中传递参数以进行数据表 ajax 调用
- android - 在 Firestore 中找不到特定字段的路径