-
Notifications
You must be signed in to change notification settings - Fork 48
Description
note: Maybe this is not an issue, probably a wrong usage of the API, but as this wasted few hours I think it worth discussing.
I've a hooked-element/uhtml (however only uhtml seems involved in the issue) project where a component was rendering a set of items.
this.html`
<ul>
${items.map((item) =>
checkSomething(item) ? html`<li>${item.something}</li>` : html``
)}
</ul>`
);
Some items must not be displayed, based on external factors.
I started this by using a react-like approach, where inside an items.map
I was returning "null" to "render nothing".
I noted that returning "null" or empty strings is the wrong way, so I tried html``
and it worked.
But the issue arise when there's a re-render. In this case I get an error:
Uncaught DOMException: Node.insertBefore: Child to insert before is not a child of this node
I suspect the issue is related to multiple empty block one near another.
Here a codesandbox example:
https://codesandbox.io/s/uhtml-empty-issue-c7otb?file=/src/index.js
- first run at page load: everything is OK
- after click on "run" again: you (can) get the error
Question: although I easily fixed this by filtering out elements I don't want to display I'm wondering if this is an issue, or maybe something to be better documented. In any case I'm curious about what's wrong with html``
.
Thanks!