|
| 1 | +Die folgenden Codebeispiele werden in der Erklärung referenziert. |
| 2 | + |
| 3 | +``` |
| 4 | +// Flow |
| 5 | +<Button aria-label="Notifications: 7"> |
| 6 | + <IconNotification /> |
| 7 | + <CounterBadge count={7} /> |
| 8 | +</Button> |
| 9 | +``` |
| 10 | + |
| 11 | +vs. |
| 12 | + |
| 13 | +``` |
| 14 | +// Not Flow |
| 15 | +<IconButton label="Benachrichtigung" icon="Notification" counterBadge={7} /> |
| 16 | +``` |
| 17 | + |
| 18 | +--- |
| 19 | + |
| 20 | +# Logik |
| 21 | + |
| 22 | +Component Libraries basieren in der Regel darauf, Komponenten zu verschachteln, |
| 23 | +um größere Komponenten zu bauen. Das ist ein weit verbreitetes und effektives |
| 24 | +Pattern, das außerdem leicht verständlich ist. Genau deshalb unterstützen wir |
| 25 | +dieses Modell auch in Flow. Wenn man zum Beispiel ein CounterBadge innerhalb |
| 26 | +eines Buttons platziert, wird dieses automatisch oben rechts positioniert – so, |
| 27 | +wie man es erwarten würde. |
| 28 | + |
| 29 | +--- |
| 30 | + |
| 31 | +# Lesbarkeit |
| 32 | + |
| 33 | +Wir haben unsere Frontend-Entwickler gefragt, was am Ende besser lesbar ist: |
| 34 | + |
| 35 | +1. Unterkomponenten über Props zu übergeben, wie das Icon im Beispiel |
| 36 | +2. Das Icon als Child in die Komponente zu legen. |
| 37 | + |
| 38 | +Wir haben uns für Variante 2 entschieden, da sie besonders bei mehreren |
| 39 | +Unterkomponenten besser lesbar ist. |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +# Wiederverwendbarkeit |
| 44 | + |
| 45 | +Entwickler bauen häufig eigene Komponenten, um sie wiederzuverwenden oder um die |
| 46 | +Implementierung aufzuteilen. Wenn es zum Beispiel bereits eine |
| 47 | +`UnreadNotificationsCounter`-Komponente gibt, die den Zähler aus der API lädt |
| 48 | +und in einem CounterBadge darstellt, kann diese einfach als Child im Button |
| 49 | +verwendet werden. |
| 50 | + |
| 51 | +``` |
| 52 | +<Button> |
| 53 | + <IconNotification /> |
| 54 | + <UnreadNotificationsCounter /> |
| 55 | +</Button> |
| 56 | +``` |
| 57 | + |
| 58 | +--- |
| 59 | + |
| 60 | +# Suspense- / ErrorBoundaries |
| 61 | + |
| 62 | +Nur mit dem „Components-Ansatz“ ist es möglich, Child-Komponenten in Loading- |
| 63 | +oder ErrorBoundaries zu kapseln. |
| 64 | + |
| 65 | +``` |
| 66 | +<Button> |
| 67 | + <IconNotification /> |
| 68 | + <Suspense> |
| 69 | + <UnreadNotificationsCounter /> |
| 70 | + </Suspense> |
| 71 | +</Button> |
| 72 | +``` |
| 73 | + |
| 74 | +--- |
| 75 | + |
| 76 | +# Aufgeblähtes Props-Interface |
| 77 | + |
| 78 | +Wenn Komponenten anfangen, Features anderer Komponenten nativ zu unterstützen, |
| 79 | +wird ihr Props-Interface schnell aufgebläht. Beim Beispiel `counterBadge={7}` |
| 80 | +könnte man denken: „Hey, das ist doch nur ein Prop mehr und leicht |
| 81 | +verständlich!“ Aber was ist, wenn CounterBadge mehr Eigenschaften als nur count |
| 82 | +unterstützt? Jede unterstützte Eigenschaft müsste dann als |
| 83 | +`counter[CounterProp]` im Button (und möglicherweise weiteren |
| 84 | +Parent-Komponenten) vorhanden sein. |
| 85 | + |
| 86 | +Aufgeblähte Gesamtbibliothek vs. All-Mighty-Components |
| 87 | + |
| 88 | +Wenn Flow für jeden Anwendungsfall spezielle Komponenten anbieten würde, müsste |
| 89 | +es z. B. einen `IconButton`, einen `CounterBadgeButton` und streng genommen |
| 90 | +sogar einen `IconCounterBadgeButton` geben. Das würde schnell zu sehr vielen |
| 91 | +Komponenten führen. |
| 92 | + |
| 93 | +Und was wäre, wenn man stattdessen alles direkt im Button unterstützt? Das führt |
| 94 | +meist zu sehr großen „All-Mighty-Components“ ohne klaren Scope und mit |
| 95 | +überladener Implementierung. |
| 96 | + |
| 97 | +--- |
| 98 | + |
| 99 | +# Children in Unterkomponenten |
| 100 | + |
| 101 | +Nur mit dem „Components-Ansatz“ ist es möglich, Children auch in |
| 102 | +Unterkomponenten zu verwenden. |
| 103 | + |
| 104 | +``` |
| 105 | +<Button aria-label="Notifications: 7"> |
| 106 | + <Icon> |
| 107 | + <IconStar /> |
| 108 | + </Icon> |
| 109 | + <CounterBadge count={7} /> |
| 110 | +</Button> |
| 111 | +``` |
| 112 | + |
| 113 | +--- |
| 114 | + |
| 115 | +# Baue deine eigenen Komponenten |
| 116 | + |
| 117 | +Wenn du bestimmte Kombinationen von Komponenten häufig in deiner UI verwendest, |
| 118 | +kannst du dir einfach eigene Komponenten mit genau den Props bauen, die du |
| 119 | +benötigst. |
0 commit comments