Не определено при получении элемента массива по индексу, записанному в переменной в Vue.JS

1

Мне кажется, что я нашел какую-то ошибку. В основном я хочу получить компонент компонентов по индексу (для тега). Но у меня возникла странная проблема. Я включил необходимые части моего кода ниже:

Рабочий пример:

let steps = ['Handler', 'Categories', 'Finalize'];
export default {
    components: {
        Handler,
        Categories,
        Finalize
    },

    data() {
        return {
            step: 0,
            currentStep: steps[0] // When specifying index without a variable 
        }
    },

}

Разбитый пример:

let steps = ['Handler', 'Categories', 'Finalize'];
export default {
    components: {
        Handler,
        Categories,
        Finalize
    },

    data() {
        return {
            step: 0,
            currentStep: steps[this.step] // When specifying index by a variable 
        }
    },
}

В рабочем примере я получаю компонент (как и ожидалось), но в ломаном я получаю currentStep: undefined в Vue DevTools. Однако ошибок в консоли нет. Что я делаю неправильно?

  • 0
    Вы проверили, с чем this связано в вашем определении data ? С console.log(this) ?
  • 0
    Я только что выбросил this на консоль. Что я должен искать?
Показать ещё 3 комментария
Теги:
vue.js

1 ответ

0
Лучший ответ

Лучше всего переместить currentStep в вычисляемое свойство. Кроме того, steps должны существовать в data чтобы они были реактивными:

let steps = ['Handler', 'Categories', 'Finalize'];
export default {
    components: {
        Handler,
        Categories,
        Finalize
    },

    data() {
        return {
            step: 0,
            steps,
        }
    },
    computed: {
      currentStep() {
        return this.steps[this.step];
      }
    }
}

Если возможно, предпочитайте вставлять steps непосредственно в данные:

data() {
    return {
        step: 0,
        steps: ['Handler', 'Categories', 'Finalize'];,
    }
},

(Но это может быть невозможно, если вы импортируете их извне. Я не знаю о вашем конкретном случае использования).

В общем, в Vue, когда что-то напрямую зависит от значения некоторых свойств компонента, вычисляемые свойства являются подходящим способом: они производительны и понятны.

В исходном коде, если бы он работал, currentStep не реагировал бы на изменение step. Используя вычисленное свойство, вместо этого, при каждом обновлении step currentStep обновляется соответствующим образом.

  • 0
    5 секунд назад удалось исправить это само по себе так же, как вы сделали; D Ну, спасибо за ответ!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню