diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fb79445878..4d831fa047c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [2.7.12](https://github.com/vuejs/vue/compare/v2.7.11...v2.7.12) (2022-10-12) + + +### Reverts + +* Revert "fix(setup): setup hook should be called before beforeCreate" ([e80cd09](https://github.com/vuejs/vue/commit/e80cd09fff570df57d608f8f5aaccee6d7f31917)), closes [#12802](https://github.com/vuejs/vue/issues/12802) [#12821](https://github.com/vuejs/vue/issues/12821) [#12822](https://github.com/vuejs/vue/issues/12822) + + + ## [2.7.11](https://github.com/vuejs/vue/compare/v2.7.10...v2.7.11) (2022-10-11) diff --git a/package.json b/package.json index d2210465745..2bb114433f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "2.7.11", + "version": "2.7.12", "packageManager": "pnpm@7.1.0", "description": "Reactive, component-oriented view layer for modern web interfaces.", "main": "dist/vue.runtime.common.js", diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 89cabf64059..e8ee4ecf382 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "2.7.11", + "version": "2.7.12", "description": "compiler-sfc for Vue 2", "main": "dist/compiler-sfc.js", "types": "dist/compiler-sfc.d.ts", diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index ea9d4326d3d..cfda873a1c8 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "vue-server-renderer", - "version": "2.7.11", + "version": "2.7.12", "description": "server renderer for Vue 2.0", "main": "index.js", "types": "types/index.d.ts", diff --git a/packages/template-compiler/package.json b/packages/template-compiler/package.json index 3f612871fc1..fd22b64d90b 100644 --- a/packages/template-compiler/package.json +++ b/packages/template-compiler/package.json @@ -1,6 +1,6 @@ { "name": "vue-template-compiler", - "version": "2.7.11", + "version": "2.7.12", "description": "template compiler for Vue 2.0", "main": "index.js", "unpkg": "browser.js", diff --git a/src/core/instance/init.ts b/src/core/instance/init.ts index 3fdfcf4f0cf..91456c21920 100644 --- a/src/core/instance/init.ts +++ b/src/core/instance/init.ts @@ -1,6 +1,6 @@ import config from '../config' import { initProxy } from './proxy' -import { initProps, initState } from './state' +import { initState } from './state' import { initRender } from './render' import { initEvents } from './events' import { mark, measure } from '../util/perf' @@ -10,7 +10,6 @@ import { extend, mergeOptions, formatComponentName } from '../util/index' import type { Component } from 'types/component' import type { InternalComponentOptions } from 'types/options' import { EffectScope } from 'v3/reactivity/effectScope' -import { initSetup } from '../../v3/apiSetup' let uid = 0 @@ -60,12 +59,8 @@ export function initMixin(Vue: typeof Component) { initLifecycle(vm) initEvents(vm) initRender(vm) - - const opts = vm.$options - initInjections(vm) // resolve injections before data/props - initProps(vm, opts.props) - initSetup(vm) callHook(vm, 'beforeCreate', undefined, false /* setContext */) + initInjections(vm) // resolve injections before data/props initState(vm) initProvide(vm) // resolve provide after data/props callHook(vm, 'created') diff --git a/src/core/instance/state.ts b/src/core/instance/state.ts index 52b23cfd430..aedb72555c9 100644 --- a/src/core/instance/state.ts +++ b/src/core/instance/state.ts @@ -2,6 +2,7 @@ import config from '../config' import Watcher from '../observer/watcher' import Dep, { pushTarget, popTarget } from '../observer/dep' import { isUpdatingChildComponent } from './lifecycle' +import { initSetup } from 'v3/apiSetup' import { set, @@ -50,6 +51,11 @@ export function proxy(target: Object, sourceKey: string, key: string) { export function initState(vm: Component) { const opts = vm.$options + if (opts.props) initProps(vm, opts.props) + + // Composition API + initSetup(vm) + if (opts.methods) initMethods(vm, opts.methods) if (opts.data) { initData(vm) @@ -63,8 +69,7 @@ export function initState(vm: Component) { } } -export function initProps(vm: Component, propsOptions: Object | undefined) { - if (!propsOptions) return +function initProps(vm: Component, propsOptions: Object) { const propsData = vm.$options.propsData || {} const props = (vm._props = shallowReactive({})) // cache prop keys so that future props updates can iterate using Array diff --git a/test/unit/features/v3/apiSetup.spec.ts b/test/unit/features/v3/apiSetup.spec.ts index 21b83769402..11757878e9c 100644 --- a/test/unit/features/v3/apiSetup.spec.ts +++ b/test/unit/features/v3/apiSetup.spec.ts @@ -263,7 +263,7 @@ describe('api: setup context', () => { }).$mount() expect(spy).toHaveBeenCalled() }) - + // #12561 it('setup props should be reactive', () => { const msg = ref('hi') @@ -333,30 +333,4 @@ describe('api: setup context', () => { await nextTick() expect(_listeners.foo()).toBe(2) }) - - // #12802 - it('should be called before all lifecycle hooks', () => { - const calls: string[] = [] - - Vue.mixin({ - beforeCreate() { - calls.push('global beforeCreate') - } - }) - - new Vue({ - beforeCreate() { - calls.push('component beforeCreate') - }, - setup() { - calls.push('setup') - } - }) - - expect(calls).toEqual([ - 'setup', - 'global beforeCreate', - 'component beforeCreate' - ]) - }) })