Чтобы ответить на ваш вопрос в первую очередь, самый чистый способ перерисовки компонента Vue или любого элемента - это привязать его атрибут key
к чему-то реактивному, что будет контролировать повторные визуализации, всякий раз, когда изменяется значение ключа, он вызываетre-render.
Чтобы сделать такой уникальный ключ для каждого рендера, я, вероятно, использовал бы увеличенное число, и всякий раз, когда я хотел бы сделать рендеринг, я увеличивал его.
<template>
<div>
<div :key="renderKey">
</div>
</div>
</template.
<script>
export default {
data: () => ({
renderKey: 0
}),
methods: {
reRender() {
this.renderKey++;
}
}
};
</script>
Теперьпочему переключение v-if
не сработало: переключение реактивного свойства между true и false не обязательно запускает 2 повторных рендеринга, потому что Vue имеет асинхронную очередь обновления, которая применяет изменения DOM в патчах в определенные периоды времени, а не для отдельных лицОбновить. Вот почему Vue такой быстрый и эффективный.
Таким образом, вы запускаете disabled
до false
, а затем до true
. Рендерер решит не обновлять DOM, поскольку окончательное значение не изменилось с прошлого раза, время составляет около 16 мс. Если я правильно помню. Таким образом, вы можете сделать эту работу, подождав более 16 мс между переключением вашей опоры между true
и false
, я говорю «мог», но не «должен».