Forráskód Böngészése

Revert "fix(setup): setup hook should be called before beforeCreate"

This reverts commit e1342df7847a51c75192fec74e94378178e046b0.

reopen #12802
close #12821
close #12822
Evan You 3 éve
szülő
commit
e80cd09fff

+ 2 - 7
src/core/instance/init.ts

@@ -1,6 +1,6 @@
 import config from '../config'
 import config from '../config'
 import { initProxy } from './proxy'
 import { initProxy } from './proxy'
-import { initProps, initState } from './state'
+import { initState } from './state'
 import { initRender } from './render'
 import { initRender } from './render'
 import { initEvents } from './events'
 import { initEvents } from './events'
 import { mark, measure } from '../util/perf'
 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 { Component } from 'types/component'
 import type { InternalComponentOptions } from 'types/options'
 import type { InternalComponentOptions } from 'types/options'
 import { EffectScope } from 'v3/reactivity/effectScope'
 import { EffectScope } from 'v3/reactivity/effectScope'
-import { initSetup } from '../../v3/apiSetup'
 
 
 let uid = 0
 let uid = 0
 
 
@@ -60,12 +59,8 @@ export function initMixin(Vue: typeof Component) {
     initLifecycle(vm)
     initLifecycle(vm)
     initEvents(vm)
     initEvents(vm)
     initRender(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 */)
     callHook(vm, 'beforeCreate', undefined, false /* setContext */)
+    initInjections(vm) // resolve injections before data/props
     initState(vm)
     initState(vm)
     initProvide(vm) // resolve provide after data/props
     initProvide(vm) // resolve provide after data/props
     callHook(vm, 'created')
     callHook(vm, 'created')

+ 7 - 2
src/core/instance/state.ts

@@ -2,6 +2,7 @@ import config from '../config'
 import Watcher from '../observer/watcher'
 import Watcher from '../observer/watcher'
 import Dep, { pushTarget, popTarget } from '../observer/dep'
 import Dep, { pushTarget, popTarget } from '../observer/dep'
 import { isUpdatingChildComponent } from './lifecycle'
 import { isUpdatingChildComponent } from './lifecycle'
+import { initSetup } from 'v3/apiSetup'
 
 
 import {
 import {
   set,
   set,
@@ -50,6 +51,11 @@ export function proxy(target: Object, sourceKey: string, key: string) {
 
 
 export function initState(vm: Component) {
 export function initState(vm: Component) {
   const opts = vm.$options
   const opts = vm.$options
+  if (opts.props) initProps(vm, opts.props)
+
+  // Composition API
+  initSetup(vm)
+
   if (opts.methods) initMethods(vm, opts.methods)
   if (opts.methods) initMethods(vm, opts.methods)
   if (opts.data) {
   if (opts.data) {
     initData(vm)
     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 propsData = vm.$options.propsData || {}
   const props = (vm._props = shallowReactive({}))
   const props = (vm._props = shallowReactive({}))
   // cache prop keys so that future props updates can iterate using Array
   // cache prop keys so that future props updates can iterate using Array

+ 1 - 27
test/unit/features/v3/apiSetup.spec.ts

@@ -263,7 +263,7 @@ describe('api: setup context', () => {
     }).$mount()
     }).$mount()
     expect(spy).toHaveBeenCalled()
     expect(spy).toHaveBeenCalled()
   })
   })
-
+  
   // #12561
   // #12561
   it('setup props should be reactive', () => {
   it('setup props should be reactive', () => {
     const msg = ref('hi')
     const msg = ref('hi')
@@ -333,30 +333,4 @@ describe('api: setup context', () => {
     await nextTick()
     await nextTick()
     expect(_listeners.foo()).toBe(2)
     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'
-    ])
-  })
 })
 })