我正在查看Angular Lifecycle Hook的官方文档。令我感到困惑的是以下解释:
Angular的单向数据流规则禁止更新视图组成之后……日志更新将浏览器的JavaScript周期推迟一圈,这足够长。
由于页面已经呈现,所以禁止更新听起来很合理,但是为什么推迟更新才可以解决问题?勾选后,视图是否仍不构成?
[请像我5岁时向我解释。
每次发生en事件(例如,当setTimeout的延迟已过去,并且执行了其回调函数时),Angular都会开始进行更改检测并将相应的更改应用于DOM。
禁止在事件发生时不更新组件的状态以及视图的状态。禁止在已经检查过组件之后,在仍进行更改检测的同时更新组件的状态,从而更新它们的视图。
例如,如果您尝试在子组件的ngAfterViewChecked挂钩中修改父组件的状态,则会从Angular中收到错误,因为这是被禁止的:Angular刚刚检测到父和子组件的更改,并且您将在更改检测期间同步在父级中进行更改。另一方面,调用setTimeout()
可以安排以后的更改,然后将再次检测到该更改,并开始新的更改检测。