Интерполяция в шаблонах Petite-Vue
Интерполяцией называется подстановка значения выражения в текстовую
часть шаблона. Используется двойная фигурная скобка:
{{ ... }}. При рендеринге компонента Petite-Vue вычисляет
содержимое выражения и выводит его в DOM-узел.
Пример простой интерполяции
<span>{{ count }}</span>
Переменная count должна присутствовать в реактивных
данных. При изменении значения Petite-Vue автоматически обновит
текстовое содержимое элемента без дополнительного кода.
Особенности вычисления выражений
Внутри интерполяции допустимы небольшие выражения Jav * aScript:
{{ count + 1 }}){{ formatDate(date) }}){{ done ? 'готово' : 'в процессе' }})Это облегчает форматирование данных на уровне шаблона. Petite-Vue не поддерживает сложные конструкции вроде объявлений переменных или управляющих операторов; внутри допускаются только выражения.
Контекст вычисления
Контекстом служит реактивное состояние, переданное в
createApp. Доступны только свойства состояния и методы,
определённые в этом же объекте. Глобальные переменные и объекты
доступны, но использовать их рекомендуется осторожно, так как нарушается
принцип изоляции состояния.
Интерполяция и безопасность
Вставка данных через {{ }} выполняет HTML-экранирование.
Это предотвращает внедрение HTML-разметки и скриптов. Для осознанной
вставки HTML применяется директива v-html, но в отличие от
интерполяции она не экранирует содержимое и должна использоваться только
для доверенного HTML.
Реактивность и повторные вычисления
При каждом изменении зависимых реактивных свойств Petite-Vue повторно вычисляет выражение внутри интерполяции. Обновления происходят узконаправленно: если значение влияет только на один текстовый узел, обновляется только он. Это уменьшает накладные расходы по сравнению с полным повторным рендером.
Интерполяция внутри атрибутов
Для атрибутов применяется синтаксис v-bind или его
краткая форма :. Текстовая интерполяция {{ }}
в атрибутах не поддерживается. Такой подход даёт большую гибкость,
поскольку v-bind работает с любым валидным JS-выражением и
обновляет атрибут реактивно:
<img :alt="title" :src="imageUrl">
Интерполяция и шаблонные литералы
Внутри v-bind допускается использование шаблонных
литералов:
<div :title="`Количество: ${count}`"></div>
Это упрощает комбинирование строк и значений без дополнительных вычислительных слоёв.
Выражения и производительность
Короткие выражения предпочтительны. Длинные выражения или частые вызовы функций в интерполяции усложняют трассировку зависимостей и приводят к избыточным обновлениям. При необходимости следует вынести вычисления в методы или вычисляемые свойства, чтобы уменьшить повторную работу при реактивных изменениях.
Связь с вычисляемыми значениями
Petite-Vue поддерживает вычисляемые (computed) значения через геттеры. Это позволяет переносить логическую обработку за пределы шаблона:
createApp({
count: 0,
get doubled() {
return this.count * 2;
}
}).mount()
<span>{{ doubled }}</span>
Интерполяция использует doubled как обычное свойство, а
зависимость от count отслеживается автоматически.
Интерполяция и условный вывод
Для условного вывода рекомендуется использовать v-if и
v-show. Тернарный оператор в интерполяции подходит только
для замены текстового содержимого. Если требуется контролировать
присутствие узлов в DOM, следует использовать директивы.
Интерполяция списков
Перебор коллекций через v-for позволяет комбинировать
интерполяцию и выражения внутри каждого элемента списка. Каждое
вычисление внутри v-for происходит в контексте текущего
элемента итерации, что делает выражения более гибкими:
<li v-for="todo INTOdos">
{{ todo.text }} ({{ todo.done ? '✓' : '✗' }})
</li>
Ключевые моменты
v-bind, а не
{{ }}