EmberJ осуждают хук жизненного цикла компонента didReceiveAttrs - PullRequest
1 голос
/ 19 апреля 2019

Для версии Ember 2.16 они удалили аргументы, передаваемые хукам жизненного цикла компонента didReceiveAttrs. Ранее я получал аргументы в виде объекта.

newAttrs:

EmptyObject: 
{
  dataTestId: "test-object"
  items: MutableCell {__MUTABLE_CELL__       [id=__ember1555539649631463096066386]: true, __REF__ [id=__ember1555539649631670217952659]: RootPropertyReference, value: Array(27)}
  prompt: SafeString {string: "Select an Initiator Group"}
  required: true
  selected: MutableCell {__MUTABLE_CELL__ [id=__ember1555539649631463096066386]: true, __REF__ [id=__ember1555539649631670217952659]: RootPropertyReference, value: undefined}
  __proto__: Object
}

После устаревания как получить такой объект в didReceiveAttrs?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Э-э, это был Устаревание, добавленное в 2.12. Вы можете получить Аргументы в компонентах Lifecycle Hooks до 2.13.0.

Альтернативный подход для получения аргументов в хуке после 2.13.0 ниже,

До:

didReceiveAttrs({ oldAttrs, newAttrs }) {
  if (oldAttrs.temp !== newAttrs.temp) {
    this.thermometer.move({ from: oldAttrs.temp, to: newAttrs.temp });
  }
}

После того, как:

didReceiveAttrs() {
  let oldTemp = this.get('_oldTemp');
  let newTemp = this.get('temp');

  if (oldTemp && oldTemp !== newTemp) {
    this.thermometer.move({ from: oldTemp, to: newTemp });
  }
  this.set('_oldTemp', newTemp);
}

Более подробную информацию можно получить из официального Руководства по устареванию

0 голосов
/ 02 мая 2019

Есть ember addon, который может предоставить измененные атрибуты,

https://github.com/workmanw/ember-diff-attrs

Сокращенное использование:

import diffAttrs from 'ember-diff-attrs';

export default Ember.Component.extend({
  didReceiveAttrs: diffAttrs('email', 'isAdmin', function(changedAttrs, ...args) {
    this._super(...args);

    if(changedAttrs && changedAttrs.email) {
      let oldEmail = changedAttrs.email[0],
          newEmail = changedAttrs.email[1];
      // Do stuff
    }
  })
});

Расширенное использование:

import diffAttrs from 'ember-diff-attrs';

export default Ember.Component.extend({
  didReceiveAttrs: diffAttrs({
    keys: ['user', 'isAdmin'],
    isEqual(key, a, b) {
      if (key === 'user') {
        return (a && b) ? a.id === b.id : a === b;
      }
      return a === b;
    },
    hook(changedAttrs, ...args) {
      this._super(...args);

      if(changedAttrs && changedAttrs.user) {
        let oldUser = changedAttrs.user[0],
            newUser = changedAttrs.user[1];
        // Do stuff
      }
    }
  })
});
...