Angular 4中能否取消不再需要的ngDoCheck()生命周期钩子?
回答
当然可以取消使用ngDoCheck()生命周期钩子啊!
ngDoCheck的设计初衷就是让开发者在Angular默认变更检测之外实现自定义的检查逻辑,它触发频繁是正常行为——毕竟每次Angular执行变更检测循环时都会调用它,哪怕组件的绑定数据没有任何变化。既然当前业务场景已经不需要这个钩子了,直接删除组件中ngDoCheck()的实现代码就可以,完全不会影响组件的正常运行。
不过有个小细节需要注意:如果你之前在ngDoCheck里编写了一些必须执行的业务逻辑(比如自定义状态同步、第三方库的更新触发等),一定要把这些逻辑迁移到更合适的地方:
- 若需要监听输入属性的变化,改用
ngOnChanges()更精准,它只会在输入属性实际变更时触发 - 若处理的是组件内部状态变更,直接把逻辑嵌入到状态变更的触发点(比如按钮点击事件、API请求回调函数中)
- 若需要在视图更新完成后执行操作,
ngAfterViewChecked()或ngAfterViewInit()会是更好的选择
举个简单的代码示例,之前你可能有这样的实现:
ngDoCheck() { // 已不再需要的自定义检查逻辑 this.performCustomCheck(); }
现在直接删掉这个方法即可,Angular不会因此报错,还能减少不必要的性能开销。
内容的提问来源于stack exchange,提问作者Jelle den Burger
相关产品推荐
相关产品推荐

