【问题标题】:Which of the run loop queues does each the new component lifecycle hooks run in?每个新的组件生命周期钩子在哪个运行循环队列中运行?
【发布时间】:2015-07-29 22:56:40
【问题描述】:

来自 Ember 博客,这些是新的组件生命周期挂钩。

第一次渲染时(按顺序):

  • didInitAttrs 在组件创建后运行,并且传递的属性保证存在。在 Ember 1.13 中,属性将以 this.get('attrName') 的形式提供。
  • didReceiveAttrs 在 didInitAttrs 之后运行,它还在后续的重新渲染中运行,这对于在所有渲染上都相同的逻辑很有用。当组件从内部重新渲染时,它不会运行。
  • willRender 在模板渲染之前运行。它在模板因任何原因更新时运行(初始和重新渲染,无论更改是由 attrs 更改还是重新渲染引起的)。
  • didInsertElement 在模板呈现并且元素位于 DOM 之后运行。
  • didRender 在 didInsertElement 之后运行(它也在后续的重新渲染中运行)。

重新渲染时(按顺序):

  • didUpdateAttrs 在组件的属性发生更改时运行(但在组件通过 component.rerender、component.set 或模板使用的模型或服务发生更改时重新渲染时不会运行)。
  • didReceiveAttrs,同上。
  • willUpdate 在组件因任何原因重新渲染时运行,包括 component.rerender()、component.set() 或模板使用的模型或服务的更改。
  • willRender,同上
  • didUpdate 在模板重新渲染并且 DOM 现在是最新的之后运行。
  • didRender,同上。

这些是运行循环队列:

  • sync 队列包含绑定同步作业
  • actions 队列是通用工作队列,通常包含计划任务,例如承诺
  • routerTransitions 队列包含路由器中的转换作业
  • render 队列包含用于渲染的作业,这些作业通常会更新 DOM
  • afterRender 包含要在所有先前计划的渲染任务完成后运行的作业。这通常对 3rd 方 DOM 操作库很有用,它只能在整个 DOM 树更新后运行
  • destroy 队列包含用于完成其他作业已计划销毁的对象的拆卸工作

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我在浏览器开发工具的帮助下查看了 Ember 的运行循环是如何工作的,我可以肯定地说:

    didInitAttrsdidReceiveAttrsrender 队列中触发 1 个简单组件:

    Ember.component.extend()
    

    只需 {{yield}} 作为模板。

    请拨入render 队列:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 2020-07-10
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多