Vue.js 3.6.0-rc.7 — стабилизация Vapor Mode, hydration и переходов

Vue.js 3.6.0-rc.7 выпущен 4 сентября 2026 года и продолжает подготовку ветки 3.6 к стабильному релизу. В этой сборке нет нового крупного API: разработчики сосредоточились на Vapor Mode, исправив 24 ошибки и добавив 7 оптимизаций, в основном вокруг hydration, Suspense, Teleport, переходов, слотов и v-for.

Vue.js 3.6.0-rc.7
Vue.js 3.6.0-rc.7

Vue 3.6.0-rc.7 почти целиком посвящён Vapor Mode

Vue.js 3.6.0-rc.7 опубликован как предварительный релиз. Согласно официальному changelog ветки minor, в нём перечислены 24 исправления ошибок и 7 улучшений производительности. Из 24 исправлений 21 относится непосредственно к runtime-vapor, ещё два — к compiler-vapor, а одно — к общему runtime-core.

Это хорошо показывает текущий статус Vue 3.6. Набор возможностей Vapor Mode был объявлен завершённым ещё при переходе ветки в RC-фазу, поэтому новые release candidate в первую очередь закрывают пограничные случаи и приводят поведение нового рендерера к привычной семантике VDOM-режима.

Сам Vapor Mode остаётся главной технической темой Vue 3.6. Он компилирует SFC-компоненты в более прямые операции с DOM и позволяет обходиться без полноценного Virtual DOM runtime там, где приложение целиком построено на Vapor-компонентах. Одновременно ветка 3.6 содержит крупную переработку @vue/reactivity на базе подходов alien-signals, однако конкретно rc.7 не добавляет в реактивность новых возможностей — изменения релиза сосредоточены на стабильности рендеринга.

Hydration, Suspense и Teleport получили серию исправлений

Самый заметный блок Vue.js 3.6.0-rc.7 связан с гидратацией серверного HTML и асинхронными компонентами. Для Vapor Mode исправлена обработка уже разрешившихся async-компонентов: стратегии hydration теперь применяются и в ситуации, когда асинхронный wrapper успел разрешиться до создания вложенного экземпляра компонента.

Практически это уменьшает число ситуаций, когда клиентская часть приложения после SSR могла неправильно продолжить гидратацию соседнего контента или потерять ожидаемое поведение обработчиков событий.

В этой же области исправлены несколько связанных сценариев:

  • deferred Teleport теперь корректно буферизует монтирование целевого содержимого на границе Suspense;
  • async wrapper сохраняет необходимые hooks при отложенной hydration;
  • асинхронный компонент, размонтированный во время загрузки под Suspense, больше не должен отрисовываться после своего разрешения;
  • исправлено определение hydration anchors по диапазону SSR-фрагмента;
  • динамические элементы могут повторно использовать SSR-якоря v-if вместо создания некорректной структуры;
  • прекращено возобновление ветки перехода out-in, если компонент уже был размонтирован.

Для приложений с SSR это один из самых практичных наборов изменений rc.7. Ошибки hydration часто проявляются не в простых компонентах, а при комбинации async-компонентов, Suspense, условного рендеринга и Teleport — именно эти пересечения сейчас активно дочищаются перед стабильным Vue 3.6.

Переходы и KeepAlive стали предсказуемее

Vue.js 3.6.0-rc.7 исправляет поведение persisted transitions при принудительном завершении leave. Изменение затрагивает сценарии, где переходы пересекаются с сохранёнными компонентами и переключением между состояниями во время уже запущенной анимации.

В runtime-core скорректировано перемещение корневых элементов persisted transition. Это должно устранить ситуации, когда при возврате к ранее отображавшемуся компоненту Vue мог неверно разместить transition root или вызвать лишние leave/enter hooks.

В Vapor runtime дополнительно исправлены:

  • повторная привязка transition hooks после изменения props у корней динамических слотов;
  • определение persisted-состояния перехода и ответственность renderer за v-show enter;
  • размещение строк v-for после уходящих элементов в конце списка;
  • перемещение строк v-for как reorder-операций, а не как новых enter-вставок.

Последний пункт особенно важен для интерфейсов с анимируемыми списками. Если перестановка существующего элемента ошибочно воспринимается как новое появление, пользователь может получить неправильную анимацию, повторный transition lifecycle или визуальный скачок.

Исправлены once-события и динамические обработчики

Два изменения rc.7 устраняют проблемы с обработчиками событий, помеченными как одноразовые. Vapor runtime больше не должен повторно регистрировать уже сработавший once listener, а также повторно привязывать такой handler при обновлении динамических props.

Это приближает поведение Vapor к ожидаемой DOM-семантике: обработчик с модификатором .once должен сработать один раз независимо от последующих реактивных обновлений компонента.

Для обычного разработчика такое исправление выглядит небольшим, но оно критично для корректности компонентов, где событие запускает необратимое действие — подтверждение формы, инициализацию ресурса, отправку аналитики или переключение состояния, которое нельзя повторять после очередного render update.

Слоты, custom elements и объединение стилей

Большая часть оставшихся исправлений затрагивает внутреннюю механику слотов и передачу атрибутов. В Vapor Mode усилены проверки fast path для slot outlets, исправлена fallback-делегация на interop-пути и сохранение fallthrough-атрибутов для корневых экземпляров custom elements.

Компилятор Vapor теперь удаляет комментарии среди дочерних узлов Transition и TransitionGroup, но сохраняет пустые текстовые узлы внутри component slots. Эти изменения нужны не ради визуального результата как такового, а для того, чтобы структура скомпилированного шаблона совпадала с ожиданиями runtime в пограничных сценариях.

Отдельное исправление касается порядка объединения style из статических атрибутов и v-bind. В rc.6 можно было получить другой итоговый стиль по сравнению с VDOM-режимом: в воспроизводимом примере ожидался синий фон, а Vapor показывал красный. В rc.7 порядок источников приведён к согласованному поведению, а сама операция объединения была дополнительно оптимизирована, чтобы не строить массив через последовательные дорогостоящие вставки в начало.

Для библиотек компонентов это особенно полезно. Такие библиотеки часто комбинируют статические class/style, пользовательские props, $attrs и динамический v-bind, поэтому даже небольшое расхождение между VDOM и Vapor быстро превращается в несовместимость внешнего вида.

Семь оптимизаций ускоряют работу со слотами

Все семь performance improvements в changelog rc.7 относятся к runtime-vapor. Основная линия оптимизации — чаще использовать быстрый путь обработки слотов и не подключать лишнюю runtime-логику там, где она не требуется.

В частности, разработчики:

  • применили анализ стабильности слотов внутри enclosing boundary;
  • добавили tree-shaking для веток async wrapper;
  • приблизили interop slot outlet к обычному slot fast path;
  • учитывают raw slots при выборе быстрого пути;
  • разрешают fast path для немаркированных slot outlets под boundary;
  • устранили повторное оборачивание once fallback-слотов на interop-пути.

Это не означает гарантированный заметный прирост производительности для каждого приложения. Изменения уменьшают накладные расходы в конкретных путях Vapor runtime, а реальный эффект будет зависеть от структуры компонентов и интенсивности работы со слотами.

Что изменилось по сравнению с Vue 3.6.0-rc.6

Vue 3.6.0-rc.6, выпущенный неделей ранее, тоже был преимущественно стабилизационным релизом. Там исправлялись HMR, DOM props, hydration cursor, v-for, form reset и состояние scheduler после ошибок. В rc.7 область тестирования заметно расширилась в сторону сложных комбинаций async rendering, transitions, slots и VDOM/Vapor interop.

ОбластьVue 3.6.0-rc.6Vue 3.6.0-rc.7
Основной фокусБазовая корректность Vapor runtime, HMR, DOM props, schedulerHydration, async-компоненты, Suspense, Teleport, transitions и slots
v-forИсправление alias/index и runtime anchorsКорректное перемещение строк и взаимодействие с уходящими элементами
HydrationИсправления cursor и начального DOM stateSSR anchors, async hydration, deferred components и Suspense
СобытияБез крупного отдельного блокаИсправлена повторная регистрация и rebinding once handlers
Производительность2 оптимизации Vapor runtime7 оптимизаций, главным образом slot fast paths и tree-shaking
Новые публичные функцииНетНет

Таким образом, rc.7 — не функциональное расширение Vue 3.6, а очередной этап устранения несовместимостей, найденных после rc.6.

Устанавливать ли Vue.js 3.6.0-rc.7 сейчас

На 5 сентября 2026 года npm по-прежнему помечает Vue 3.5.42 как latest, а Vue 3.6.0-rc.7 распространяется через тег rc. Поэтому для обычных production-проектов 3.6.0-rc.7 не является заменой стабильной ветке 3.5.x.

Проверить релиз в тестовом проекте можно явно:

npm install vue@3.6.0-rc.7

или через prerelease-тег:

npm install vue@rc

Обновление особенно важно для разработчиков, которые уже занимаются тестированием Vue 3.6, Vapor Mode, SSR/hydration или проверяют совместимость библиотек компонентов с новым рендерером. Именно в этих случаях версия rc.7 устраняет реальные ошибки, выявленные в предыдущих candidate-сборках.

Для production-приложений на Vue 3.5.x рекомендуется оставаться на стабильном канале до выхода финальной версии Vue 3.6.0. Версия rc.7 не предлагает нового API, которое оправдывало бы переход на prerelease-версию. Вместо этого, релиз демонстрирует, что основная работа над стабильной версией сейчас сосредоточена на исправлении сложных runtime-сценариев и приведении Vapor Mode к привычному поведению Vue.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться