Когда у меня есть компонент Vue в файле .vue с элементом данных isLoading: false
и шаблоном:
<div v-show="isLoading" id="hey" ref="hey">Loading...</div>
<button @click="loadIt()">Load it</button>
И методом:
loadIt() {
this.isLoading = true
this.$nextTick(() => {
console.log(this.$refs.hey) // virtual DOM
console.log(document.getElementById('hey')) // actual DOM
// ...other work here
})
}
Я подумалчто функция nextTick позволит обновлять как виртуальный, так и реальный DOM, и, таким образом, две строки console.log будут выводить одинаковые результаты.Однако они этого не делают: кажется, что реальный DOM не обновляется сразу, и, следовательно, второй журнал приводит к элементу с display: none;
, тогда как первый журнал нет - я получаю это на консоли:
<div id="hey" data-v-964d645e="" style="">
<div id="hey" data-v-964d645e="" style="display: none;">
(Кстати, даже если я использую setTimeout
вместо this.$nextTick
, я получаю те же результаты из console.log. Я также пытался использовать хук updated
, но тот жесимптомы возникают там. Если я кодирую любой вариант в файле .js, проблема исчезает, но сохраняется в файле .vue.)
Есть ли какая-то оптимизация или дальнейшая асинхронность в обновлении Vueфактический DOM из виртуального DOM? Как мне получить актуальную версию DOM для немедленного обновления?