瀏覽代碼

feat: warn missing render() function

Evan You 7 年之前
父節點
當前提交
2f936a0dfe
共有 2 個文件被更改,包括 11 次插入1 次删除
  1. 10 0
      packages/core/src/component.ts
  2. 1 1
      packages/core/src/componentProxy.ts

+ 10 - 0
packages/core/src/component.ts

@@ -13,6 +13,7 @@ import { nextTick } from '@vue/scheduler'
 import { ErrorTypes } from './errorHandling'
 import { initializeComponentInstance } from './componentUtils'
 import { EventEmitter, invokeListeners } from './optional/eventEmitter'
+import { warn } from './warning'
 
 // public component instance type
 export interface Component<P = {}, D = {}> extends PublicInstanceMethods {
@@ -150,6 +151,15 @@ class InternalComponent implements PublicInstanceMethods {
     }
   }
 
+  // necessary to tell this apart from a functional
+  render(...args: any[]): any {
+    if (__DEV__) {
+      const name =
+        (this.$options && this.$options.displayName) || this.constructor.name
+      warn(`Class component \`${name}\` is missing render() method.`)
+    }
+  }
+
   // to be set by renderer during mount
   $forceUpdate: () => void = NOOP
 

+ 1 - 1
packages/core/src/componentProxy.ts

@@ -42,7 +42,7 @@ const renderProxyHandlers = {
         // TODO warn non-present property
       }
       const value = Reflect.get(target, key, receiver)
-      if (isFunction(value)) {
+      if (key !== 'constructor' && isFunction(value)) {
         // auto bind
         return getBoundMethod(value, target, receiver)
       } else {