Рекомендуется ли изменять свойство компонента, отмеченное декоратором ввода?

Я пытался создать компонент вкладки в Angular и Vue. Vue закричал (выдал ошибку в консоли), когда я изменил свойства компонента. Кажется, что с Angular все в порядке.

<tab [active]="true"></tab>

export class TabComponent implements OnInit {
  @Input() name: string;
  @Input() active = false;

  ngOnInit() {
    // Here I am mutatating an input property which is bad because, 
    // further changes to that input doesn't take effect

    this.active = false;
    console.log({name: this.name, active: this.active});
  }
}

Я лично считаю неправильным изменять свойство input компонента. У меня вопрос, почему команда Angular не добивается этого, выдавая ошибку в консоли.

Vue отобразит это сообщение

vue.js:634 [Предупреждение Vue]: избегайте изменения свойства напрямую, так как значение будет перезаписано всякий раз при повторной визуализации родительского компонента. Вместо этого используйте данные или вычисленное свойство на основе значения свойства. Изменяемая опора: "selected"

1 ответ

Совет в предупреждении Vue применим и к угловому компоненту. Входные данные следует рассматривать как неизменяемые, потому что вы не можете предотвратить их перезапись родительским компонентом. Если вы хотите использовать реквизиты для инициализации состояния, у вас должно быть отдельное поле внутреннего состояния, которое вы инициализируете в одном из хуков жизненного цикла (например, OnChanges или OnInit).

У меня есть привычка отмечать все свои входные данные как доступные только для чтения, чтобы у меня не возникало соблазна их видоизменить.

Другие вопросы по тегам