This page lists all Vue 3 breaking changes from Vue 2.
While it looks like a lot has changed, a lot of what you know and love about Vue is still the same; but we wanted to be as thorough as possible and provide detailed explanations and examples for every documented change.
- Global Vue API is changed to use an application instance
- Global and internal APIs have been restructured to be tree-shakable
v-modelusage on components has been reworked, replacing
<template v-for>and non-
v-fornodes has changed
v-forprecedence when used on the same element has changed
v-bind="object"is now order-sensitive
v-on:event.nativemodifier has been removed
- Functional components can only be created using a plain function
functionalattribute on single-file component (SFC)
functionalcomponent option are deprecated
- Async components now require
defineAsyncComponentmethod to be created
- Component events should now be declared with the
- Render function API changed
$scopedSlotsproperty is removed and all slots are exposed via
$listenershas been removed / merged into
- Custom element checks are now performed during template compilation
isattribute usage is restricted to the reserved
Other Minor Changes
destroyedlifecycle option has been renamed to
beforeDestroylifecycle option has been renamed to
defaultfactory function no longer has access to
- Custom directive API changed to align with component lifecycle and
dataoption should always be declared as a function
dataoption from mixins is now merged shallowly
- Attributes coercion strategy changed
- Some transition classes got a rename
<TransitionGroup>now renders no wrapper element by default
- When watching an array, the callback will only trigger when the array is replaced. If you need to trigger on mutation, the
deepoption must be specified.
<template>tags with no special directives (
v-slot) are now treated as plain elements and will result in a native
<template>element instead of rendering its inner content.
- Mounted application does not replace the element it's mounted to
hook:events prefix changed to
- $on, $off and $once instance methods
- Inline templates attributes
$destroyinstance method. Users should no longer manually manage the lifecycle of individual Vue components.
- Global functions
delete, and the instance methods
$delete. They are no longer required with proxy-based change detection.