Мне кажется, что я нашел какую-то ошибку. В основном я хочу получить компонент компонентов по индексу (для тега). Но у меня возникла странная проблема. Я включил необходимые части моего кода ниже:
Рабочий пример:
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. Однако ошибок в консоли нет. Что я делаю неправильно?
Лучше всего переместить 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
обновляется соответствующим образом.
this
связано в вашем определенииdata
? Сconsole.log(this)
?this
на консоль. Что я должен искать?