This is the aggregated changelog for 3.4 that includes changes landed in all alpha and beta pre-releases. For changelog of individual pre-releases, please check here.
- general: MathML support (#7836) (d42b6ba), closes #7820
- reactivity: more efficient reactivity system (#5912) (16e06ca), closes #311 #1811 #6018 #7160 #8714 #9149 #9419 #9464
- reactivity: expose last result for computed getter (#9497) (48b47a1)
- runtime-core / dx: link errors to docs in prod build (#9165) (9f8ba98)
- runtime-core: add
onceoption to watch (#9034) (a645e7a) - runtime-core: provide full props to props validator functions (#3258) (8e27692)
- compiler-core: export error message (#8729) (f7e80ee)
- compiler-core: support specifying root namespace when parsing (40f72d5)
- compiler-core: support v-bind shorthand for key and value with the same name (#9451) (26399aa)
- compiler-core: improve parsing tolerance for language-tools (41ff68e)
- compiler-core: support accessing Error as global in template expressions (#7018) (bcca475)
- compiler-core: lift vnode hooks deprecation warning to error (8abc754)
- compiler-core: export runtime error strings (#9301) (feb2f2e)
- compiler-core: add current filename to TransformContext (#8950) (638f1ab)
- compiler-sfc: analyze import usage in template via AST (#9729) (e8bbc94), closes #8897 nuxt/nuxt#22416
- compiler-sfc: expose resolve type-based props and emits (#8874) (9e77580)
- compiler-sfc: bump postcss-modules to v6 (2a507e3)
- compiler-sfc: promote defineModel stable (#9598) (ef688ba)
- compiler-sfc: support import attributes and
usingsyntax (#8786) (5b2bd1d) - compiler-sfc:
defineModelsupport local mutation by default, remove local option (f74785b), closes /github.com/vuejs/rfcs/discussions/503#discussioncomment-7566278 - ssr: add
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__feature flag (#9550) (bc7698d) - ssr: improve ssr hydration mismatch checks (#5953) (2ffc1e8), closes #5063
- types: use enum to replace const enum (#9261) (fff7b86), closes #1228
- types: add emits and slots type to
FunctionalComponent(#8644) (927ab17) - types: export
AriaAttributestype (#8909) (fd0b6ba) - types: export
ObjectPluginandFunctionPlugintypes (#8946) (fa4969e), closes #8577 - types: expose
DefinePropstype (096ba81) - types: expose
PublicPropstype (#2403) (44135dc) - types: improve event type inference when using
hwith native elements (#9756) (a625376) - types: provide
ComponentInstancetype (#5408) (bfb8565) - types: support passing generics when registering global directives (#9660) (a41409e)
- compiler-sfc: avoid sfc source map unnecessary serialization and parsing (f15d2f6)
- compiler-sfc: remove magic-string trim on script (e8e3ec6)
- compiler-sfc: use faster source map addMapping (50cde7c)
- compiler-core: optimize away isBuiltInType (66c0ed0)
- compiler-core: optimize position cloning (2073236)
- codegen: optimize line / column calculation during codegen (3be53d9)
- codegen: optimize source map generation (c11002f)
- shared: optimize makeMap (ae6fba9)
Starting in 3.4, Vue no longer registers the global JSX namespace by default. This is necessary to avoid global namespace collision with React so that TSX of both libs can co-exist in the same project. This should not affect SFC-only users with latest version of Volar.
If you are using TSX, there are two options:
-
Explicitly set jsxImportSource to
'vue'intsconfig.jsonbefore upgrading to 3.4. You can also opt-in per file by adding a/* @jsxImportSource vue */comment at the top of the file. -
If you have code that depends on the presence of the global
JSXnamespace, e.g. usage of types likeJSX.Elementetc., you can retain the exact pre-3.4 global behavior by explicitly referencingvue/jsx, which registers the globalJSXnamespace.
Note that this is a type-only breaking change in a minor release, which adheres to our release policy.
- Reactivity Transform was marked deprecated in 3.3 and is now removed in 3.4. This change does not require a major due to the feature being experimental. Users who wish to continue using the feature can do so via the external plugin at https://vue-macros.dev/features/reactivity-transform.html
app.config.unwrapInjectedRefhas been removed. It was deprecated and enabled by default in 3.3. In 3.4 it is no longer possible to disable this behavior.@vnodeXXXevent listeners in templates are now a compiler error instead of a deprecation warning. Use@vue:XXXlisteners instead.v-isdirective has been removed. It was deprecated in 3.3.