javascript / expert
Snippet
Dynamische VNode-Array-Transformation mittels funktionaler Render-Funktionen
Dieses Beispiel zeigt die programmatische virtuelle DOM-Manipulation in Vue 3 durch Rückgabe einer Render-Funktion aus setup(). Unter Verwendung nativer JavaScript-Array-Operationen wie filter() und map() werden über Slots übergebene untergeordnete VNodes dynamisch gefiltert und gewrappt.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { defineComponent, h, VNode } from 'vue';export const DynamicGroup = defineComponent({name: 'DynamicGroup',setup(_, { slots }) {return () => {const defaultNodes: VNode[] = slots.default ? slots.default() : [];const wrappedChildren = defaultNodes.filter((vnode) => typeof vnode.type !== 'symbol').map((vnode, index) => {return h('div', { key: vnode.key ?? index, class: 'group-item' }, [vnode]);});return h('section', { class: 'dynamic-group' }, wrappedChildren);};}});
vue
Erklärung
1
setup(_, { slots }) {
Greift auf Komponentenslots innerhalb von Composition API setup zu, ohne Template-Compiler-Optionen zu benötigen.
2
const defaultNodes: VNode[] = slots.default ? slots.default() : [];
Ruft das Array von rohen virtuellen DOM-Knoten ab, die an den Standard-Komponentenslot übergeben wurden.
3
.filter((vnode) => typeof vnode.type !== 'symbol')
Filtert VNode-Array-Elemente heraus, um Fragment- oder Kommentar-Knoten anhand von Knotentypprüfungen zu entfernen.
4
.map((vnode, index) => {
Transformiert jeden rohen untergeordneten VNode über Array-Mapping in einen eindeutig geschlüsselten Wrapper-DOM-Knoten.
5
return h('div', { key: vnode.key ?? index, class: 'group-item' }, [vnode]);
Nutzt Vues h() Hyperscript-Funktion, um gewrappte strukturelle Elemente dynamisch zu erzeugen.
6
return h('section', { class: 'dynamic-group' }, wrappedChildren);
Rendert den übergeordneten Container, der alle Array-transformierten VNodes in einen einzigen DOM-Elementbaum einbettet.