diff --git a/packages/uni-mp-vue/dist/vue.runtime.esm.js b/packages/uni-mp-vue/dist/vue.runtime.esm.js index 204b276d2579289e8b338406c517c4cd908426b7..7eac15011144faad68b1aec098fcaf7b0fd52041 100644 --- a/packages/uni-mp-vue/dist/vue.runtime.esm.js +++ b/packages/uni-mp-vue/dist/vue.runtime.esm.js @@ -2561,7 +2561,7 @@ function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false // local registration // check instance[type] first which is resolved for options API resolve(instance[type] || Component[type], name) || - // window registration + // global registration resolve(instance.appContext[type], name); if (!res && maybeSelfReference) { // fallback to implicit self-reference @@ -3048,7 +3048,7 @@ const PublicInstanceProxyHandlers = { return ctx[key]; } else if ( - // window properties + // global properties ((globalProperties = appContext.config.globalProperties), hasOwn(globalProperties, key))) { { @@ -3392,6 +3392,11 @@ let compile; const isRuntimeOnly = () => !compile; function finishComponentSetup(instance, isSSR, skipOptions) { const Component = instance.type; + // template / render function normalization + // could be already set when returned from setup() + if (!instance.render) { + instance.render = (Component.render || NOOP); + } // support for 2.x options if (__VUE_OPTIONS_API__ && !(false )) { setCurrentInstance(instance); @@ -4670,10 +4675,48 @@ function mountComponent(initialVNode, options) { } return instance.proxy; } +const getFunctionalFallthrough = (attrs) => { + let res; + for (const key in attrs) { + if (key === 'class' || key === 'style' || isOn(key)) { + (res || (res = {}))[key] = attrs[key]; + } + } + return res; +}; +function renderComponentRoot(instance) { + const { type: Component, vnode, proxy, withProxy, props, slots, attrs, emit, render, renderCache, data, setupState, ctx } = instance; + let result; + const prev = setCurrentRenderingInstance(instance); + try { + if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) { + // withProxy is a proxy with a different `has` trap only for + // runtime-compiled render functions using `with` block. + const proxyToUse = withProxy || proxy; + result = render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx); + } + else { + // functional + const render = Component; + result = + render.length > 1 + ? render(props, { attrs, slots, emit }) + : render(props, null /* we know it doesn't need it */) + ? attrs + : getFunctionalFallthrough(attrs); + } + } + catch (err) { + handleError(err, instance, 1 /* RENDER_FUNCTION */); + result = false; + } + setCurrentRenderingInstance(prev); + return result; +} function setupRenderEffect(instance) { const componentUpdateFn = () => { if (!instance.isMounted) { - instance.render && instance.render.call(instance.proxy); + renderComponentRoot(instance); patch(instance); } else { @@ -4686,6 +4729,7 @@ function setupRenderEffect(instance) { invokeArrayFns(bu); } effect.allowRecurse = true; + renderComponentRoot(instance); patch(instance); // updated hook if (u) { @@ -4925,11 +4969,21 @@ function initApp(app) { var plugin = { install(app) { initApp(app); + // TODO 旧编译器使用了$createElement 导致告警 + app.config.globalProperties.$createElement = () => { }; const oldMount = app.mount; app.mount = function mount(rootContainer) { const instance = oldMount.call(app, rootContainer); - // @ts-ignore - createMiniProgramApp(instance); + if (global.createApp) { + global.createApp(instance); + } + else { + // @ts-ignore 旧编译器 + if (typeof createMiniProgramApp !== 'undefined') { + // @ts-ignore + createMiniProgramApp(instance); + } + } return instance; }; },