less
и stylus
является абсолютным (#1685) (578f25c)HYDRATE_EVENTS
(#1707) (de62cc0)v-if
(355c052), закрывает #1704
Teleport
(#1703) (04a4eba)suspense
в качестве корневого элемента (#1718) (07ece2e)v-model
на пользовательских элементах (0b3b1cf)suspense
(#1698) (2a633c8)com/vuejs/vue-next/commit/2a633c84ff0e522a7562d3194a8f4e4012eb8281)), закрывает #1689
v-model
на объявленных пользовательских элементах (71c3c6e), закрывает #1699
proxyRefs
и тип ShallowUnwrapRefs
(#1682) (aa06b10)<script setup>
(6f5d840)<style vars scoped>
должно применяться только к исходному коду до трансформации (4951d43), закрывает #1623
useCssVars
(#1658) (6f148d0)onContextCreated
к generate
(#1672) (615dccd)defineComponent
(#1661) (304830a)readonly
, если нет setter
(#1654) (dabdc5e)<template>
(af7e100), закрывает #1637
filename
из опций при компиляции препроцессора styl (#1635) (0526e5d)flush:sync
(#1633) (8facaef)DeepReadonly
(#1606) (527c2c8)compiler-sfc: исправить кодоген для useCssVars
(9b5ff2b)
compiler-sfc: запретить использование src
для <script setup>
+ не использовать (af4b0c2)
runtime-dom: не использовать useCssVars
при установке (44e6da1)
slots: правильно заставить обновиться пересылаемые слоты (aab99ab), закрывает #1594### Новые возможности
compiler-sfc: экспортировать зависимости для CSS и препроцессоров CSS (#1278) (e41d831)### Улучшения производительности
runtime-core: избегать повторного вызова postFlushCb
(165068d), закрывает #1595
v-if/else-if/else
(#1589) (64c7b2f), закрывает #1587
<script setup>
(9146cc4)looseEqual()
(#379) (fe1b27b)DeepReadonly
для возвращаемого типа readonly
(#1462) (b772bba), закрывает #1452# 3.0.0-beta.21 (2020-07-14).left
и .right
в v-on (6b63ba2)scopeId
как атрибута для узлов слота с тем же scopeId
(#1561) (583a1c7), закрывает vitejs/vite#536
emits
из миксинов/extends (ba3b3cd), закрывает #1562
nullish
значениями (cb6a091), закрывает #1576
<style vars>
(b9595e6)<script setup>
(экспериментальная) (4c43d4e)<style vars>
(bd5c3b9)<style scoped>
(f3cc41f)\r
в допустимые символы после имени закрывающего тега (#1515) (64e2f46), закрывает #1476
<input list="...">
как атрибут (441c236), закрывает #1526
patchStyle
при ложном следующем значении (#1504) (77538ec), закрывает #1506
JSX.IntrinsicAttributes
(#1517) (a5b4332), закрывает #1516
Object.prototype
(f3e9c1b)keep-alive
(4e8e689)unmount
в параметр патча для первоначального монтирования (2bdb5c1)vnode
из существующего vnode
(c9629f2)Transition
(#1456) (d4cd128), закрывает #1455
BaseTransition
с режимом in-out
(#1404) (2ff8dca), закрывает #1400
transformAssetUrl
должен игнорировать встроенные данные URL (#1431) (90c285c)cloneVNode
должен сохранять правильный экземпляр ctx при нормализации ref (be69bee), закрывает #1311
scopeId
от VNode
(f3f94e4), закрывает #1399
scopeId
для компонентов внутри слотов (978d952)defineComponent
(2961e14), закрывает #1385
ComponentOptionsMixin
(#1361) (68e2d6c)__v_isRef
(#1392) (c43a6e6)$attrs
(6abac87), закрывает #1346
spellcheck
и draggable
как атрибуты (4492b88), закрывает #1350
tfoot
, caption
, col
при строковом представлении в случае ошибки (#1333) (fbaf52a)ref
в реактивном объекте должен быть отслеживаемым (#1058) (80e1693)com/vuejs/vue-next/commit/80e1693e1f525a6c5811689fbeaccdccae1e2c23))shallowReactive
не должна быть только для чтения (#1212) (c97d1ba)Teleport
(#1271) (c463a71), закрывает #1235* types: добавление RawSlots в сигнатуру h (#1293) (cab769f)inheritRef
+ <transition>
и <keep-alive>
наследуют ref
(38f2d23)__proto__
на объектах-прокси (#1133) (037fa07)compiler/types: сигнатура опции компилятора getTextMode
изменилась с
(tag: string, ns: string, parent: ElementNode | undefined) => TextModes
на
(node: ElementNode, parent: ElementNode | undefined) => TextModes
compiler-sfc: поддержка преобразования абсолютных ссылок на активы (6a0be88)### ВАЖНЫЕ ИЗМЕНЕНИЯ
compiler-sfc: опция transformAssetUrlsBase
опции @vue/compiler-sfc
была удалена. Она была объединена в transformAssetUrls
, которая теперь также принимает формат
{
base?: string
includeAbsolute?: string
tags?: { [name: string]: string[] }
}
withDirectives
как публичного типа (583ba0c)compiler-ssr: избегаем ненужного импорта withCtx (08b4e88)
hmr: поддержка hmr для статических узлов (386b093)
hydration: исправление предупреждения о несоответствии текста (e087b4e)
keep-alive: не вызывать onVnodeBeforeUnmount, если это компонент KeepAlive (#1079) (239270c)
transition-group: должно собирать сырые дочерние элементы с Fragment (#1046) (8ed3455), закрывает #1045
предупреждение: всегда проверять наличие экземпляра компонента при форматировании трасс (a0e2c12)### Новые возможности
apiWatch
(892fb6d)Некоторые типы API часов переименованы.
BaseWatchOptions
-> WatchOptionsBase
StopHandle
-> WatchStopHandle
this
, должны быть отложены (ff4d1fc), закрывает #1016 #1029
ref(false)
на Ref<boolean>
(#1028) (0bdd889)com/vuejs/vue-next/commit/0bdd8891569eb15e492007b3eb0f45d598e85b3f))defineComponent
присваиваемым типу Component
(#1032) (f3a9b51), закрывает #993
startsWith
вместо indexOf
(#989) (054ccec)ComponentCustomOptions
для объявления пользовательских опций (c0adb67)ExtractPropTypes
(#983) (4cf5e07)ComponentCustomProperties
(#982) (be21cfb)runtime-core: пропуск предупреждения emit, если есть эквивалентный onXXX prop (0709380)### Улучшения производительности
runtime-core: использование сырого контекста при инициализации опций компонента (bfd6744)
readonly
теперь не отслеживает изменения, если вызван на простых объектах.
lock
и unlock
были удалены. Прокси readonly
больше не может быть напрямую изменен.
Однако, он все еще может обернуть уже реактивный объект и отслеживать изменения в исходном реактивном объекте.
isReactive
теперь возвращает true
только для прокси, созданных с помощью reactive
, или для прокси readonly
, обёртывающего прокси reactive
.
Введена новая утилита isProxy
, которая возвращает true
для обоих реактивных и readonly прокси.
markNonReactive
переименован в markRaw
.
on
(6eb3399), закрывает #949
event.stopImmediatePropagation
для нескольких слушателей (d45e475), закрывает #916
markReadonly
(e8a866e)emit
(55566e8)customRef
(b83c580)toRef
(486dc18)data()
(3e7bb7d)markReadonly
удален.on
и за которым следует заглавная буква или неалфавитный символ, считаются слушателями событий.this.$emit()
и setupContext.emit()
больше не возвращают значения. Для логики, которая зависит от возвращаемого значения слушателей, слушатель должен быть объявлен как свойство onXXX
и вызван напрямую. Это все еще позволяет родительскому компоненту передать обработчик с помощью v-on
, поскольку v-on:foo
внутренне компилируется в onFoo
. ссылка: https://github.com/vuejs/rfcs/pull/16
(8c17535), закрывает #945
<pre>
(be666eb)onxxx
(2302dea)com/vuejs/vue-next/commit/2302dea1624d4b964fed71e30089426212091c11)), закрывает #927
onError
для defineAsyncComponent
(e804463)decodeEntities
.namedCharacterReferences
удалена.maxCRNameLength
удалена.retryWhen
и maxRetries
для defineAsyncComponent
были заменены более гибкой опцией onError
, согласно https://github.com/vuejs/rfcs/pull/148
pre
(7f30cb5), закрывает #908
undefined
(#894) (94562da), закрывает #892
v-cloak
должен удаляться после компиляции на корневом элементе (#893) (0ed147d), закрывает #890* runtime-dom: правильная поддержка создания пользовательских встроенных элементов (b1d0b04)PropType
с функцией (#915) (026eb72), закрывает #748
<portal>
в <teleport>
(eee5095)createAsyncComponent
в defineAsyncComponent
(#888) (ebc5873)### Новые возможностиtransformElement
из compiler-core (#907) (20f4965)fallthrough
было скорректированов соответствии с https://github.com/vuejs/rfcs/pull/154
<portal>
был переименован в <teleport>
.
Атрибут target
также был переименован в to
, поэтому новый способ использования будет следующим:
<Teleport to="#modal-layer" :disabled="isMobile">
<div class="modal">
привет
</div>
</Teleport>
Основная причина переименования — избежать потенциального конфликта названий с нативными порталами.
asyncComponent: опции error
и loading
асинхронного компонента были переименованы в errorComponent
и loadingComponent
соответственно.
runtime-core: createAsyncComponent
был переименован в defineAsyncComponent
для согласованности с defineComponent
.
config.optionMergeStrategies
(528621b)compiler-sfc: добавление опции ssr (3b2d236)
runtime-core: добавление специального свойства для получения опций компонента класса (#821) (dd17fa1)
runtime-core: реализация RFC-0020 (bb7fa3d)
runtime-core: установка контекста для вручную созданных функций слотов (8a58dce)
server-renderer: рендеринг suspense в режиме vnode (#727) (589aeb4)
ssr: поддержка компилятором Suspense (80c625d)
ssr: скрытие анкоров комментариев во время гибридизации в режиме разработки (cad5bcc)
ssr: улучшение обработки несоответствий фрагментов (60ed4e7)
ssr: поддержка getSSRProps для директив vnode (c450ede)
ssr/suspense: гибридизация suspense (a3cc970)
Возврат "refactor(directives): удаление binding.instance" (2370166)### КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ
runtime-core: данные больше не поддерживают объектный формат (в соответствии с RFC-0020)
runtime-core: порядок аргументов RendererOptions.patchProp
изменился
Позиции prevValue
и nextValue
были обменены для обеспечения согласованности с другими функциями в реализации рендера. Это затрагивает только пользовательские рендера, использующие API createRenderer
.
portal: исправление текста запасного варианта портала (4397528)
реактивность: разрешить запуск эффекта внутри контекстов выполнения без отслеживания (274f81c), закрывает #804
реактивность: методы идентификации Map/Set должны работать даже если исходное значение содержит реактивные элементы (cc69fd7), закрывает #799
реактивность: не должно запускать зависимость длины при удалении элемента из массива (a306658), закрывает #774
runtime-core: обеспечить обновление наследуемых атрибутов на оптимизированном дочернем корне (6810d14), закрывает #677 #784
slots: исправление условного слота (3357ff4), закрывает #787
ssr: исправление компиляции ssr на лету + вставка вспомогательной функции для ветки запасного варианта слота (3be3785)### Переработка кода
runtime-core: корректировка поведения fallthrough для атрибутов (e1660f4), закрывает #749
runtime-core: откат изменений реактивности для результата setup() (e67f655)
runtime-core: корректировка поведения падающих атрибутов
Обновлено согласно предстоящему RFC https://github.com/vuejs/rfcs/pull/137
Неявное падение теперь по умолчанию применяется только для списка разрешенных атрибутов (class, style, обработчики событий, атрибуты доступности и атрибуты данных).
Падение теперь применяется независимо от того, имеет ли компонент разрешенные атрибуты.
runtime-core: откат изменений реактивности результата setup()
Откат изменений 6b10f0c & a840e7d. Мотивацией первоначального изменения
было избегание необязательных глубоких преобразований, но это можно
достичь явным образом, помечая значения как нереактивные с помощью
markNonReactive
. Удаление поведения реактивного преобразования приводит к проблеме удобства использования, так как простые объекты, содержащие refs (что обычно возвращают функции составления), когда выставляются как вложенные свойства из setup()
, не развертываются в refs в шаблонах. Это противоречит интуиции "нет .value в шаблоне" и единственным обходным путём является явное повторное обертывание с reactive()
.
Поэтому в этом коммите мы возвращаемся к предыдущему поведению, где объекты, возвращаемые из setup()
, неявно обертываются с reactive()
для глубокого развертывания refs.
directives: пользовательские директивы больше не предоставляют доступ к экземпляру
Это редко используемое свойство, которое создает дополнительную сложность при обеспечении его соответствия правильному экземпляру. С точки зрения дизайна, пользовательская директива должна быть ограничена элементом и данными, к которым она привязана, и не должна иметь доступа к полному экземпляру изначально.
compiler-dom: правильная сериализация классовых/стилевых привязок при выгрузке статических строк (1b9b235)
reactivity: все эффекты должны быть запущены при изменении длины массива (#754) (5fac655)
sfc: наследование родительского scopeId на дочернем корневом элементе (#756) (9547c2b)
types: обновление типизации unwrap для setup binding для 6b10f0c (a840e7d), закрывает #738### Оптимизация кода
сохранение refs в реактивных массивах (775a7c2), закрывает #737
runtime-core: замена watch(fn, options?)
на watchEffect
Сигнатура watch(fn, options?)
была заменена новой API watchEffect
, которая имеет ту же форму использования и поведение. Теперь watch
поддерживает только сигнатуру watch(source, cb, options?)
.
реактивность: реактивные массивы больше не разворачивают вложенные refs
Когда реактивные массивы содержат refs, особенно смесь refs и простых значений, методы прототипа массива могут работать некорректно — например, методы sort() или reverse() могут перезаписывать значение ref вместо перемещения его (см. #737). Обеспечение правильного поведения для всех возможных методов массива, сохраняя поведение разворачивания ref, является чрезвычайно сложной задачей. Даже если Vue обрабатывает встроенные методы внутренне, это всё равно будет работать некорректно, когда пользователь пытается использовать утилиту третьей стороны (например, lodash) на реактивном массиве, содержащем refs. После этих коммитов, аналогично другим типам коллекций, таким как Map и Set, массивы больше не будут автоматически разворачивать вложенные refs.
Использование смешанных refs и простых значений в массивах должно быть редким в практике. В случаях, когда это необходимо, пользователь может создать вычисляемое свойство, которое выполнит разворачивание.
openBlock
для фрагмента v-for
(12fcf9a)keep-alive
при использовании в шаблонах (ade07c6), закрывает #715
is
только для <component>
(78c4f32)if
(e0f3c6b), закрывает #725
src
(#695) (2d56dfd)computed
(2fb7a63), закрывает #733* reactivity: предотвращение утечек зависимостей между компонентами в setup() (d9d63f2)compiler: предупреждение об недопустимых дочерних элементах для перехода и keep-alive (4cc39e1)
compiler-core: поддержка режима: cjs в кодогенерации (04da2a8)
compiler-core/v-on: поддержка @vnode-xxx для vnode-хуков (571ed42)
compiler-dom: обработка постоянных выражений при сериализации статического контента (8b7c162)
compiler-dom/runtime-dom: сериализация подходящих статических деревьев (27913e6)
reactivity: добавление функции shallowReactive (#689) (7f38c1e)
runtime-core/reactivity: экспонирование shallowReactive (#711) (21944c4)
server-renderer: поддержка компиляции шаблонов на лету (#707) (6d10a6c)
ssr: поддержка гидратации порталов (70dc3e3)
ssr: использование useSSRContext (fd03149)### Улучшения производительности* предотвратить встраивание горячих функций рендерера минификаторами (629ee75)
реактивность: улучшенный отслеживаемый вычисляемый (#710) (8874b21)### КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ
watch: поведение watch
было скорректировано.
При использовании сигнатуры watch(source, callback, options?)
вызов обратного вызова теперь по умолчанию выполняется лениво (соответствует поведению версии 2.x).
Обратите внимание, что сигнатура watch(effect, options?)
по-прежнему выполняется сразу, так как она должна немедленно вызвать effect
, чтобы собрать зависимости.
Опция lazy
была заменена противоположной опцией immediate
, которая по умолчанию имеет значение false
. (Она игнорируется при использовании сигнатуры эффекта)
Из-за вышеуказанных изменений опция watch
в Options API теперь ведет себя точно так же, как в версии 2.x.
При использовании сигнатуры эффекта или { immediate: true }
начальное выполнение теперь выполняется синхронно, а не откладывается до монтирования компонента. Это необходимо для некоторых случаев использования, чтобы они работали правильно с async setup()
и Suspense. В результате немедленный вызов наблюдателя больше не имеет доступа к монтированному DOM. Однако наблюдатель может быть инициирован внутри onMounted
, чтобы сохранить предыдущее поведение.# 3.0.0-alpha.4 (2020-01-27)
createApp
(c07751f)reactive()
для renderContext
(6b10f0c)объект, возвращаемый из setup()
, больше не передается неявно в reactive()
.RenderContext — это объект, возвращаемый функцией setup()
(или новый объект, если функция setup()
отсутствует). До этого изменения он передавался неявно в reactive()
для разворачивания ref. Однако это приводило к побочному эффекту — ненужной глубокой реактивной конвертации свойств, которые не должны были стать реактивными (например, возвращаемые значения вычислений и внедренные нереактивные объекты), что может привести к проблемам с производительностью. Это изменение убирает вызов reactive()
и вместо этого выполняет поверхностное разворачивание ref на уровне render proxy. Критическое изменение заключается в том, что если пользователь возвращает объект с простым свойством из setup()
, например return { count: 0 }
, это свойство больше не будет обновляться при изменении через обработчик событий в шаблоне. Вместо этого требуются явные ref.
Это также означает, что любые объекты, которые явно не были сделаны реактивными в setup()
, останутся нереактивными. Это может быть желательным при экспонировании тяжелых внешних состоятельных объектов на this
.
API createApp
был скорректирован.
createApp()
теперь принимает корневой компонент и, по желанию, объект параметров для передачи корневому компоненту.app.mount()
теперь принимает один аргумент (корневой контейнер).app.unmount()
больше не требует аргументов.Новое поведение выглядит следующим образом:
const app = createApp(RootComponent)
app.mount('#app')
app.unmount()
<svg>
в блоки для правильной работы runtime isSVG (f2ac28b)<svg>
и <foreignObject>
(4f06eeb)app.unmount(container)
(#601) (04ac6c4), закрывает #593
Для изменений между 2.x и 3.0 до этого выпуска, обратитесь к объединённым RFC здесь.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )