Vue снова меняет способ обновления интерфейса. Во фреймворке появляется Vapor — режим рендеринга, который позволяет точечно менять страницу без виртуального DOM. Для разработчика привычный код при этом почти не меняется. Возникает логичный вопрос: если прежняя модель работала, зачем Vue понадобилось снова переделывать одну из ключевых частей фреймворка?
Возможно, ответ в том, что Vue сделал круг в своём развитии. Его первые версии обновляли конкретные части страницы напрямую. Затем фреймворк перешёл на виртуальный DOM, а теперь снова движется к точечным обновлениям — только уже с более зрелой реактивной системой, современным компилятором и с учётом опыта, накопленного за десять лет.
Этот путь помогает понять, почему во Vue появились ref и .value, чем его реактивность похожа на популярные сегодня сигналы и какую задачу на самом деле решает Vapor. А ещё — почему переход с Vue 2 на Vue 3 оказался таким масштабным, но следующий архитектурный скачок уже не требует переписывать приложение.
В статье проследим развитие реактивности от первых версий Vue до Vapor и посмотрим, как менялась связь между состоянием и интерфейсом. Но сначала отделим эту идею от конкретного фреймворка и разберём, из каких частей состоит простейшая реактивная система.