首页 文章

每个新的组件生命周期钩子运行在哪个运行循环队列中?

提问于
浏览
3

从Ember博客来看,这些是新的组件生命周期钩子 .

首次渲染(按顺序):didInitAttrs在创建组件后运行,并且传递的attrs保证存在 . 在Ember 1.13中,属性将以this.get('attrName')的形式提供 . didReceiveAttrs在didInitAttrs之后运行,它也在后续的重新渲染上运行,这对于所有渲染中相同的逻辑都很有用 . 当组件从内部重新渲染时,它不会运行 . willRender在呈现模板之前运行 . 它在模板因任何原因(初始和重新渲染时)更新时运行,无论更改是由更改还是重新渲染引起的 . 在渲染模板并且元素在DOM中之后,didInsertElement运行 . didRender在didInsertElement之后运行(它也在后续的重新渲染中运行) . 在重新渲染时(按顺序):didUpdateAttrs在组件的属性发生更改时运行(但不是在重新呈现组件时,通过component.rerender,component.set或模板使用的模型或服务中的更改) . didReceiveAttrs,与上面相同 . 当组件因任何原因重新呈现时,willUpdate会运行,包括component.rerender(),component.set()或模板使用的模型或服务中的更改 . willRender,与上面的相同didUpdate在模板重新渲染后运行,DOM现在是最新的 . didRender,和上面一样 .

这些是运行循环队列:

同步队列包含绑定同步作业操作队列是常规工作队列,通常包含计划任务,例如promises routerTransitions队列包含路由器中的转换作业渲染队列包含用于渲染的作业,这些作业通常会更新DOM afterRender包含要在所有先前计划的渲染任务完成后运行的作业 . 这通常适用于第三方DOM操作库,只应在更新完整个DOM树后运行 . 销毁队列包含作业以完成其他作业已计划销毁的对象的拆除

1 回答

  • 0

    我在浏览器开发工具的帮助下看了Ember的运行循环如何工作,我当然可以这样说:

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

    Ember.component.extend()
    

    并且只是 {{yield}} 作为模板 .

    render 队列中呼叫:
    Call in render queue

相关问题