]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat: warn missing render() function
authorEvan You <yyx990803@gmail.com>
Wed, 17 Oct 2018 21:35:03 +0000 (17:35 -0400)
committerEvan You <yyx990803@gmail.com>
Wed, 17 Oct 2018 21:35:03 +0000 (17:35 -0400)
packages/core/src/component.ts
packages/core/src/componentProxy.ts

index 1ef89edcb8abc6af51519de39a4fb3cc4d0577f8..e333554c4ed70789b3ab88565d80d3b90f01274b 100644 (file)
@@ -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
 
index c1d95650863a34298bba1d7f1846f2217ea34ca9..a42e812d7ec8ed96206238bc1adea3e12f2dce3a 100644 (file)
@@ -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 {