fix(runtime-core): respect render function from mixins

fix #1630
This commit is contained in:
Evan You
2020-07-27 17:44:17 -04:00
parent 71c3c6e2a0
commit 354d79c42b
3 changed files with 40 additions and 21 deletions

View File

@@ -589,6 +589,7 @@ function finishComponentSetup(
instance.render = Component.render as InternalRenderFunction
}
} else if (!instance.render) {
// could be set from setup()
if (compile && Component.template && !Component.render) {
if (__DEV__) {
startMeasure(instance, `compile`)
@@ -604,25 +605,6 @@ function finishComponentSetup(
;(Component.render as InternalRenderFunction)._rc = true
}
if (__DEV__ && !Component.render) {
/* istanbul ignore if */
if (!compile && Component.template) {
warn(
`Component provided template option but ` +
`runtime compilation is not supported in this build of Vue.` +
(__ESM_BUNDLER__
? ` Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".`
: __ESM_BROWSER__
? ` Use "vue.esm-browser.js" instead.`
: __GLOBAL__
? ` Use "vue.global.js" instead.`
: ``) /* should not happen */
)
} else {
warn(`Component is missing template or render function.`)
}
}
instance.render = (Component.render || NOOP) as InternalRenderFunction
// for runtime-compiled render functions using `with` blocks, the render
@@ -642,6 +624,26 @@ function finishComponentSetup(
applyOptions(instance, Component)
currentInstance = null
}
// warn missing template/render
if (__DEV__ && !Component.render && instance.render === NOOP) {
/* istanbul ignore if */
if (!compile && Component.template) {
warn(
`Component provided template option but ` +
`runtime compilation is not supported in this build of Vue.` +
(__ESM_BUNDLER__
? ` Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".`
: __ESM_BROWSER__
? ` Use "vue.esm-browser.js" instead.`
: __GLOBAL__
? ` Use "vue.global.js" instead.`
: ``) /* should not happen */
)
} else {
warn(`Component is missing template or render function.`)
}
}
}
const attrHandlers: ProxyHandler<Data> = {