Корректно ли использование Ember Set в Ember Octane

В Ember Octane this.set заменено прямым присвоением значения в нужное поле. Между тем осталась возможность импортировать set для использования с специфичными ember object. В тоже время set корректно работает и с Glimmer компонентами.

В подавляющем количестве случаев простое присвоение работает корректно, и @tracked поля обновляются правильно. Но, например, в случае использования apollo.query, который возращает promise и изменении массива по индексу, изменения отображаются после разрешения промиса.

Например, в данном случае, где есть массив с индикаторами загрузки для каждого элемента перебираемого через each:

{{#each this.items as |item index|}}
  <SomeComponent @loading={{get this.loading index}}/>
{{/each}}
this.loading[index] = true;
    
this.apollo.query({ query: CurrentQuery }, 'query_name').then(() => {
    this.loading[index] = false;
})

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

Если убрать this.loading[index] = false;, то индикация отобразится после разрешения промиса, хоть и была объявлена раньше.

2 решения которые помогают решить эту промлему, это использование set:

set(this, 'loading.' + index, true);

Или после установки значения, перезадать поле само в себя:

this.loading[index] = true;
this.loading = this.loading;

Собственно от того возникает несколько вопросов:

  1. Корректно ли использовать Ember Set в случаях изменения конкретного элемента массива или лучше перезадавать поле само в себя, или же есть более правильные методы.
  2. Корректно ли вообще использовать Ember Set в проектах на Ember Octane и не планируется ли разработчиками Ember в дальнейшем удалить поддержку set даже в виде отдельного пакета?

Ответы (0 шт):