From 2f936a0dfe165a1f9e96b1ebabab2491e300c5ef Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 17 Oct 2018 17:35:03 -0400 Subject: [PATCH] feat: warn missing render() function --- packages/core/src/component.ts | 10 ++++++++++ packages/core/src/componentProxy.ts | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/core/src/component.ts b/packages/core/src/component.ts index 1ef89edcb..e333554c4 100644 --- a/packages/core/src/component.ts +++ b/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

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 diff --git a/packages/core/src/componentProxy.ts b/packages/core/src/componentProxy.ts index c1d956508..a42e812d7 100644 --- a/packages/core/src/componentProxy.ts +++ b/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 {