- From: Shiba <notifications@github.com>
- Date: Mon, 24 Mar 2025 04:46:58 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/736/2747846671@github.com>
DeepDoge left a comment (whatwg/dom#736) @rniwa `NodeGroup` suppose to appear in the DOM tree. It should have the `ParentNode` and `ChildNode` interfaces, and not be an `Element`. A `NodeGroup` can be empty like any other `ParentNode`. Only thing is, its transparent to query selector since its not an `Element`. Right now, comment nodes are used for similar behavior which is a hack, and it can break the framework when DOM is mutated without the framework, which is absurd. --- <details> <summary> More details that might be a little off topic, but important for context. At least for one of my use case. </summary> In order to have a DOM that doesn't break when mutated without the framework, we also need a sync way to follow lifecycle(connected/disconnect) of DOM child nodes, including this new `NodeGroup` since it's also a `ChildNode`. This is needed so we can cleanup things when a `Node` is connected or disconnected from the DOM. <br/><br/> <b>For example:</b> We can create a `NodeGroup` that is bind to a Signal. And call `.replaceChildren()` on the `NodeGroup` every time Signal emits a change. It can also be empty too, like normal. We can reference this `NodeGroup` like any other `Node` anywhere, and append it anywhere in the DOM as well, like any other `ChildNode`. And when `NodeGroup` is disconnected we can stop listening the Signal, and when it's reconnected we can start listening again. Currently only thing we can follow lifecycle of synchronously is custom`HTMLElement`(s), and only the custom ones for some reasons. _(Following lifecycle of any `Element` can be supported by this proposal in the future: https://github.com/WICG/webcomponents/issues/1029)_ For example right now we can have something like this: ```ts class SignalViewer extends HTMLElement { constructor(signal: Signal) } ``` The problem is, this is an `HTMLElement`, meaning it that its visible to query selectors. One problem would be having a `<ul>` parent and having a Signal in it that gives bunch of `<li>` elements. Since signal represented as `HTMLElement` on the DOM, CSS query selectors like `ul > li` won't work. As I said, right now comment nodes are abused by the frameworks, and also frameworks break if you connect or disconnect stuff from the DOM without the framework. Once `NodeGroup` exists it would be easy to represent reactive `ChildNode`(s) in DOM, for example as easy as this: ```ts toChild(value: unknown): string | Node { //... if (/* value is signal */) { // Return `NodeGroup` } // ... } ``` </details> -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/dom/issues/736#issuecomment-2747846671 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/dom/issues/736/2747846671@github.com>
Received on Monday, 24 March 2025 11:47:02 UTC