From 8219f0775525a10dc0493a46a988522d30f4c5cd Mon Sep 17 00:00:00 2001 From: Anup Date: Thu, 9 Jul 2020 02:09:24 +0530 Subject: [PATCH] (async-loader): Use reference in vnode for current node --- packages/async-loader/async.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/async-loader/async.js b/packages/async-loader/async.js index a3610c03d..5123e37f7 100644 --- a/packages/async-loader/async.js +++ b/packages/async-loader/async.js @@ -1,8 +1,29 @@ -import { h, Component } from 'preact'; +import { Component, options, h } from 'preact'; const PENDING = {}; export default function async(load) { + let dom; + let old = options.vnode; + + // get access to the current DOM node from vnode. + options._diff = (vnode) => { + if (!component && vnode._children) { + let prev; + for (let i = 0; i < vnode._children.length; i++) { + let c = vnode._children[i]; + if (c) { + prev = c._dom || c.__e || prev; + + if (c.type === AsyncComponent) { + dom = prev.nextSibling; + } + } + } + } + if (old) old(vnode); + }; + let component; function AsyncComponent() { Component.call(this); @@ -23,7 +44,7 @@ export default function async(load) { return h(component, props); } - const me = (this.__P || this._parentDom).lastChild; + const me = dom; return ( me &&