diff --git a/packages/runtime-core/src/compat/renderFn.ts b/packages/runtime-core/src/compat/renderFn.ts index 49646eda487..624fbf9a70d 100644 --- a/packages/runtime-core/src/compat/renderFn.ts +++ b/packages/runtime-core/src/compat/renderFn.ts @@ -38,12 +38,15 @@ import { isCompatEnabled, } from './compatConfig' import { compatModelEventPrefix } from './componentVModel' +import { resolveMergedOptions } from '../componentOptions' export function convertLegacyRenderFn( instance: ComponentInternalInstance, ): void { const Component = instance.type as ComponentOptions - const render = Component.render as InternalRenderFunction | undefined + const render = (Component.render || resolveMergedOptions(instance).render) as + | InternalRenderFunction + | undefined // v3 runtime compiled, or already checked / wrapped if (!render || render._rc || render._compatChecked || render._compatWrapped) { diff --git a/packages/vue-compat/__tests__/renderFn.spec.ts b/packages/vue-compat/__tests__/renderFn.spec.ts index 04d8aaac19e..383f6f5b154 100644 --- a/packages/vue-compat/__tests__/renderFn.spec.ts +++ b/packages/vue-compat/__tests__/renderFn.spec.ts @@ -252,4 +252,20 @@ describe('compat: render function', () => { expect(vm.$el).toBeInstanceOf(HTMLDivElement) expect(vm.$el.outerHTML).toBe(`