@Serega_SRG

Насколько правильно так перезаписывать свойство?

Имеется компонент, поведение которого (условный рендеринг) может определяться разными вещами.
У них есть свой приоритет. Props пути, Props от родителя, состояние какого-то геттера в state.
Насколько корректно делать так:

mounted () {
  if (prop) {
    this.x = 'a'
  }
  if (route) {
    this.x = 'b'
  }
  if (state) {
    this.x = 'c'
  }
}

То есть, перезаписывать свойство, если имеется более приоритетный источник данных?
  • Вопрос задан
  • 198 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Не надо бессмысленных переприсваиваний, давайте изменим порядок проверок на обратный и будем сразу записывать наиболее приоритетное значение. Какие тут есть варианты:

Наиболее очевидный.

Вспоминаем про существование оператора else:

if (state) {
  this.x = 'c';
} else if (route) {
  this.x = 'b';
} else if (prop) {
  this.x = 'a';
}

К чёрту условные операторы.

Складываем данные в массив и ищем в нём подходящее значение:

this.x = [
  [ state, 'c' ],
  [ route, 'b' ],
  [  prop, 'a' ],
].find(n => n[0])?.[1] ?? this.x;

Тернарная дичь.

this.x = 
  state ? 'c' :
  route ? 'b' :
  prop  ? 'a' :
          this.x;

Ещё дичь - switch.

switch (true) {
  case !!state: this.x = 'c'; break;
  case !!route: this.x = 'b'; break;
  case  !!prop: this.x = 'a'; break;
}


mounted () {
  ...

Вот это непонятный момент - а что, если какое-то из проверяемых значений изменится уже после монтирования экземпляра компонента? Наверное, следует сделать ваш x вычисляемым свойством.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Aetae
@Aetae Куратор тега Vue.js
Тлен
Перезаписывать не надо. Проверили все условия и присвоили разок.
Если надо присваивать много - Object.assign вам в помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы