Директива v-once
— это встроенная директива Vue.js, которая позволяет оптимизировать производительность, ограничивая рендеринг элемента или компонента только одним разом.
Главная задача: Указать Vue, что содержимое элемента/компонента должно быть обработано и отрендерено только один раз, после чего кэшироваться и не обновляться при изменениях данных.
v-once
и все его дочерние элементы становятся статическими<template>
<div>
<span v-once>{{ title }}</span> <!-- Зафиксируется при первом рендере -->
<span>{{ dynamicText }}</span> <!-- Будет обновляться -->
</div>
</template>
<script>
export default {
data() {
return {
title: 'Статический заголовок',
dynamicText: 'Динамический текст'
}
}
}
</script>
<template>
<div>
<StaticComponent v-once :initialValue="value" />
<DynamicComponent :currentValue="value" />
</div>
</template>
Для статического контента:
Для сложных вычислений:
<div v-once>
{{ calculateHeavyValue() }} <!-- Вычислится только один раз -->
</div>
<template>
<div>
<!-- Статическая часть -->
<header v-once>
<h1>{{ appTitle }}</h1>
<p>Версия {{ version }}</p>
</header>
<!-- Динамическая часть -->
<main>
<p>Текущее время: {{ currentTime }}</p>
</main>
</div>
</template>
<script>
export default {
data() {
return {
appTitle: 'Мое приложение',
version: '1.0.0',
currentTime: new Date().toLocaleTimeString()
}
},
created() {
setInterval(() => {
this.currentTime = new Date().toLocaleTimeString()
}, 1000)
}
}
</script>
Директива v-once
— это мощный инструмент оптимизации производительности Vue-приложений, который позволяет зафиксировать статическое содержимое после первого рендера. Она особенно полезна для элементов, которые точно не будут меняться в течение жизненного цикла приложения.