为什么在 init 和 didUpdateAttrs 分配 属性 是不同的?

Why assigning a property at init and didUpdateAttrs are different?

Ember.js Guide,有一个这样的例子:

import Ember from 'ember';

export default Ember.Component.extend({
  init() {
    this._super(...arguments);
    this.errors = [];
  },

  didUpdateAttrs() {
    this._super(...arguments);
    this.set('errors', []);
  },

  ...
});

为什么分配给 errors 属性 在 initdidUpdateAttrs?它们有什么区别?

已更新 根据@locks 回答:

何时设置可观察性?初始化后?但是父组件的值在初始化之前已经赋给了子组件的属性。

这必须主要与可观察性有关。 在 init 上,尚未设置可观察性,因此 this.errors = []this.set('errors', []) 在功能上相似。

如果您在 didUpdateAttrs 生命周期挂钩中执行 this.errors = [],相关的计算属性和模板将不会更新。这是因为您当前需要 get/set 才能符合 KVO。