1 00:00:02,390 --> 00:00:07,550 Nachdem diese Aktion ausgelöst wurde, können wir zum Reduzierer gehen und hier Code für die Eingabeänderung schreiben, und das 2 00:00:08,170 --> 00:00:09,440 ist sehr einfacher Code. 3 00:00:09,440 --> 00:00:18,650 Wir geben einen neuen Status zurück, in den ich meinen alten Status kopiere und den Wert mit Aktion aktualisieren möchte. value, weil value eine Eigenschaft ist, die ich für diese 4 00:00:19,400 --> 00:00:25,650 Aktion habe, die andere ist isValid und das ist die andere Sache, die ich auch 5 00:00:25,650 --> 00:00:30,710 bei jedem Tastendruck aktualisieren möchte, isValid für diese Eingabe, nicht für das 6 00:00:30,710 --> 00:00:38,420 gesamte Formular, sondern für diese intern verwaltete Eingabe. Ich werde hier nicht berührt aktualisieren, stattdessen sollte berührt aktualisiert werden, wenn 7 00:00:38,930 --> 00:00:43,490 wir tatsächlich den Fokus verlieren, da dies bedeutet, dass der Benutzer für den Moment mit der 8 00:00:43,490 --> 00:00:52,550 Eingabe von Inhalten fertig ist. Jetzt möchte ich dies als berührt markieren und möglicherweise Validierungsfehler anzeigen. Hier ist der Handler für verlorenen Fokus eine Funktion, 9 00:00:52,580 --> 00:00:56,690 die ich hinzufüge, und dort werde ich eine Aktion 10 00:00:59,970 --> 00:01:01,890 auslösen. Jetzt erstelle 11 00:01:01,890 --> 00:01:04,470 ich hier oben eine Aktionskennung, Eingabeunschärfe 12 00:01:04,710 --> 00:01:16,170 wie diese, Eingabeunschärfe wie diese und jetzt können wir Eingabeunschärfe hier versenden, müssen keine Daten anhängen und jetzt können wir sie in unserem Reduzierer verwenden dass in einem anderen Fall 13 00:01:16,170 --> 00:01:24,060 Eingabeunschärfe und wenn dies der Fall ist, gebe ich einen neuen Status zurück, in dem ich den alten Status kopiere, weil 14 00:01:24,060 --> 00:01:29,280 ich den Wert behalten möchte und gültig ist und das nicht ändere, aber 15 00:01:29,280 --> 00:01:36,620 ich möchte so schnell wie möglich auf true setzen Wenn wir eine Eingabe verwischen, wird sie als berührt behandelt. 16 00:01:36,750 --> 00:01:44,110 Jetzt müssen wir nur noch diese Funktion anschließen, also werde ich den onBlur-Listener hier einstellen und auf den Handler für verlorenen Fokus zeigen, damit 17 00:01:44,110 --> 00:01:46,870 dieser ausgelöst wird, wenn diese Eingabe unscharf wird. 18 00:01:49,850 --> 00:01:57,100 Nun, das ist alles schön und dies verwaltet den Status innerhalb dieser Eingabe. Natürlich muss ich 19 00:01:57,190 --> 00:02:03,370 den Wert und die Informationen, ob diese Eingabe gültig ist oder nicht, an 20 00:02:03,370 --> 00:02:14,700 meine Eltern weiterleiten, also an den Bildschirm zum Bearbeiten des Produkts. Daher können wir hier einen Verwendungseffekt als Import in die Eingabekomponente hinzufügen und 21 00:02:14,700 --> 00:02:15,310 ihn 22 00:02:18,430 --> 00:02:28,070 möglicherweise hier hinzufügen. In der Funktion "Verwendungseffekt" möchte ich eine Funktion aufrufen, die ich über Requisiten erhalten möchte, möglicherweise bei einer Änderung 23 00:02:28,130 --> 00:02:40,980 der Eingabe. Der Name liegt bei Ihnen und ich werde dies einfach ausführen und meinen Eingabestatuswert weiterleiten, und mein Eingabestatus ist eine gültige Information, so dass wir in der 24 00:02:40,980 --> 00:02:48,540 übergeordneten Komponente hier eine Funktion hinzufügen können, die diese am Ende abhört, die ausgelöst wird. Das empfängt 25 00:02:48,540 --> 00:02:53,790 diese beiden Argumente und dann im übergeordneten Element, sodass wir in 26 00:02:53,790 --> 00:03:00,310 der Bildschirmkomponente dort unseren Status aktualisieren können. Jetzt ist es wichtig, wann dieser 27 00:03:00,310 --> 00:03:07,420 Verwendungseffekt ausgeführt wird und nicht nach jedem Tastendruck? Stattdessen sollte dies immer dann ausgeführt werden, 28 00:03:07,420 --> 00:03:17,780 wenn sich unser Eingabestatuswert ändert oder natürlich gültig ist. Da dies von uns abhängt oder um genau zu sein, senden wir diese Informationen möglicherweise 29 00:03:17,780 --> 00:03:25,910 nur dann, wenn der eingegebene Eingabestatus wahr ist, da sich die übergeordnete Komponente sonst möglicherweise nicht darum kümmert. 30 00:03:26,100 --> 00:03:31,680 Unsere Abhängigkeit hier ist also der gesamte Eingabestatus, da wir alle Werte verwenden, diese Funktion jedoch 31 00:03:31,680 --> 00:03:36,600 nur dann auf die übergeordnete Komponente auslösen, wenn sie berührt wird. Daher wird dieser 32 00:03:36,600 --> 00:03:42,240 Effekt häufiger ausgeführt, meistens jedoch nicht Solange Berühren nicht wahr ist und Requisiten natürlich auch unsere 33 00:03:42,480 --> 00:03:49,170 Abhängigkeit sind. Um hier eine unendliche Rendering-Schleife zu vermeiden, können wir die Objektzerstörungssyntax verwenden und Eingabewechsel herausziehen, sodass wir 34 00:03:49,650 --> 00:03:56,640 dies nicht tun, wenn sich andere Requisiten ändern Setzen Sie diesen Effekt erneut ein, da wir dort unten Änderungen an den 35 00:03:56,640 --> 00:04:01,890 Eingaben benötigen. Jetzt können wir hinzufügen, dass dies eine Abhängigkeit ist. Andere Änderungen an den 36 00:04:01,890 --> 00:04:03,820 Requisiten lösen dies nicht aus. 37 00:04:04,260 --> 00:04:10,620 Jetzt rufen wir dies für die übergeordnete Komponente auf, wenn dies berührt wird, und leiten dann den Wert und die 38 00:04:10,650 --> 00:04:13,470 Gültigkeit dieser Eingabe an die übergeordnete Komponente weiter. 39 00:04:16,680 --> 00:04:23,400 Lassen Sie uns das jetzt im Bildschirm zum Bearbeiten des Produkts nutzen. Dort können wir bei unseren Eingaben wie bei der Titeleingabe 40 00:04:23,400 --> 00:04:29,670 die Requisite zum Ändern der Eingabe hinzufügen, und das ist die Requisite, auf die ich hier richtig ziele. Sie müssen 41 00:04:29,670 --> 00:04:34,230 also die richtige Benennung und Dies erwartet eine Funktion als Wert, die dann beim 42 00:04:34,230 --> 00:04:38,140 Aufruf zwei Argumente erhält - den Wert und die Gültigkeit dieser Eingabe. 43 00:04:38,220 --> 00:04:44,490 Hier möchte ich also auf eine Funktion verweisen, und das kann unser sagender Eingabewechsel-Handler sein. Wir können dies recyceln. Ich benenne 44 00:04:44,490 --> 00:04:46,910 es einfach um, um es passender zu machen. 45 00:04:47,130 --> 00:04:55,070 Damit der Eingabewechsel-Handler hier wie folgt ausgelöst werden kann, möchte ich immer noch meine Kennung übergeben, da ich diese für alle 46 00:04:55,100 --> 00:04:59,930 meine Eingaben wiederverwenden möchte, und jetzt, da ich in der Bildschirmkomponente bin, 47 00:04:59,930 --> 00:05:07,940 werden wir mehrere Eingaben haben und dort , wir bekommen also unsere Kennung und dann bekommen wir den Wert und die 48 00:05:07,940 --> 00:05:09,410 gültigen Informationen, oder? 49 00:05:09,410 --> 00:05:15,740 Eingabewert und Eingabevalidität, das bekommen wir, richtig, denn das ist es, was 50 00:05:15,740 --> 00:05:19,940 wir hier aus der Eingabekomponente heraus weiterleiten, das 51 00:05:19,940 --> 00:05:22,510 ist es, was wir 52 00:05:22,580 --> 00:05:31,110 bei der Eingabeänderungsfunktion an diese weitergeben. Daher müssen wir hier keine Validierung durchführen, sondern nur diese Informationen weiterleiten. Wir leiten den Eingabewert weiter, wir leiten die Eingabevalidität 53 00:05:31,110 --> 00:05:38,310 weiter und dies geschieht nur, wenn die Eingabe übrigens berührt wird. Wenn sie also den Fokus verliert und dies natürlich nur eine Einschränkung 54 00:05:38,310 --> 00:05:38,760 ist, 55 00:05:38,790 --> 00:05:40,320 die ich hier hinzugefügt 56 00:05:43,310 --> 00:05:48,010 habe, müssen Sie den Fokus verloren haben, Sie Sie können natürlich auch zur Eingabekomponente gehen 57 00:05:48,020 --> 00:05:53,060 und diese entfernen, wenn Sie überprüfen, ob die Gültigkeit und der Wert in der übergeordneten Komponente 58 00:05:53,060 --> 00:05:59,260 für jede Eingabe und für jeden Tastendruck aktualisiert werden sollen. Eine weitere Sache, die ich tun möchte, ist, dass ich 59 00:05:59,260 --> 00:06:07,390 dies hier in einen Rückruf für die Verwendung einbinden möchte, damit diese Funktion nicht unnötig neu erstellt wird, da wir daran denken, dass wir diese 60 00:06:07,510 --> 00:06:13,050 Funktion bei einer Eingabeänderung in der Eingabekomponente und dort übergeben haben Auf der anderen Seite ist dies 61 00:06:13,060 --> 00:06:13,630 eine 62 00:06:13,630 --> 00:06:15,400 Abhängigkeit von diesem Effekt, sodass 63 00:06:15,430 --> 00:06:18,190 dieser Effekt wiederholt wird, wenn sich dies ändert. 64 00:06:18,190 --> 00:06:22,780 Es sollte sich also nicht zu oft ändern, um unnötige Effektläufe zu vermeiden. Daher 65 00:06:22,810 --> 00:06:28,900 müssen wir hier unsere Abhängigkeiten angeben. Die einzige Abhängigkeit, die wir haben, ist der Status des Versandformulars, der sich 66 00:06:29,080 --> 00:06:31,690 tatsächlich nie ändern wird. Wir sind also gut, 67 00:06:31,690 --> 00:06:32,430 dies 68 00:06:32,430 --> 00:06:35,620 sollte niemals neu erstellt werden, weil die Die Logik dort 69 00:06:35,680 --> 00:06:43,690 ändert sich nicht, wir erhalten alle Werte, die wir als Argumente benötigen. Damit habe ich in meinem Produktbildschirm noch meine Formulare, die natürlich alle Formularwerte und Formulargültigkeiten enthalten, aber ich verwalte sie nur Dies hier, 70 00:06:50,310 --> 00:06:55,600 weil ich es später einreichen muss und weil ich die Gesamtgültigkeit des Formulars ableiten muss. Ich mache das nicht, weil 71 00:06:55,600 --> 00:06:58,280 ich hier jede Eingabe verwalten muss, 72 00:06:58,390 --> 00:07:05,100 wir machen das stattdessen innerhalb der Eingabekomponente. Für die Einreichung usw. benötigen 73 00:07:05,100 --> 00:07:06,460 wir 74 00:07:06,500 --> 00:07:18,810 weiterhin die Informationen zu jedem Geschäft, jedoch den Wert. Wenn ich jetzt zur Eingabe zurückkehre, vergessen Sie nicht, dass Sie auch den Anfangswert 75 00:07:19,320 --> 00:07:22,600 festlegen müssen und ob dieser anfänglich gültig 76 00:07:22,680 --> 00:07:31,290 sein soll. Wenn ich also zum Bildschirm zum Bearbeiten des Produkts zurückkehre, sollten wir hier den Anfangswert auf setzen Was? 77 00:07:31,320 --> 00:07:35,640 Nun, wir können überprüfen, ob wir ein bearbeitetes Produkt haben, und wenn wir dies tun, sollte der Anfangswert 78 00:07:35,640 --> 00:07:37,150 hier bearbeitet werden. Titel, 79 00:07:37,170 --> 00:07:44,760 ansonsten ist es eine leere Zeichenfolge und dies sollte anfänglich gültig sein. Verwenden Sie diese Requisite hier, 80 00:07:45,480 --> 00:07:47,480 wenn wir ein bearbeitetes 81 00:07:49,830 --> 00:07:51,860 Produkt haben. Wenn dies der 82 00:07:51,870 --> 00:08:00,780 Fall ist, mit dem Doppelknall hier, wenn dies wahr ist. Wenn wir kein bearbeitetes Produkt haben, kann dies zunächst nicht gültig 83 00:08:00,780 --> 00:08:01,530 sein. 84 00:08:01,530 --> 00:08:03,390 Dann übergebe ich false, was 85 00:08:03,390 --> 00:08:07,210 gut ist, und genau das sollte der Fall sein. 86 00:08:07,280 --> 00:08:13,040 Jetzt können wir diese beiden Zeilen auch in die imageUrl kopieren. Dort leiten wir natürlich den 87 00:08:13,040 --> 00:08:20,400 Bild-URL-Wert als Standardwert weiter, ansonsten kann er so bleiben. Für den Preis haben wir niemals einen Anfangswert und 88 00:08:20,400 --> 00:08:25,650 er wird niemals anfänglich gültig sein. Zur Beschreibung hingegen können wir dies 89 00:08:25,660 --> 00:08:28,950 noch einmal hinzufügen und hier auf Beschreibung verweisen. 90 00:08:32,270 --> 00:08:39,050 Damit muss ich eine Sache in der Eingabekomponente beheben, über die ich auch gerade nachgedacht habe. Natürlich 91 00:08:39,050 --> 00:08:43,450 ist hier der Formularstatus nicht mehr verfügbar. Stattdessen haben wir hier 92 00:08:43,450 --> 00:08:47,950 unseren internen Status und ich habe diesen Eingabestatus benannt Was mein 93 00:08:47,960 --> 00:08:49,870 Reduzierer zurückgibt, sollten wir 94 00:08:50,120 --> 00:08:51,700 hier natürlich verwenden. 95 00:08:51,700 --> 00:08:57,830 Hier haben wir also inputState. Wert als Wert, so einfach ist das 96 00:08:57,920 --> 00:09:03,590 und hier haben wir inputState. isValid als Scheck und das sollte alles sein. 97 00:09:03,590 --> 00:09:10,060 Wenn wir dies speichern und uns das ansehen, wollen wir sehen, ob das funktioniert. Wenn wir hierher gehen, haben wir anfangs alle Fehlermeldungen, 98 00:09:10,060 --> 00:09:13,360 was sinnvoll ist, da sie anfangs alle ungültig sind. 99 00:09:13,790 --> 00:09:20,500 Wenn ich hier anfange zu tippen, erhalte ich einen Fehler, kann die Variable isValid in meiner Eingabekomponente nicht finden, 100 00:09:20,500 --> 00:09:26,910 die in sein muss Dieser Handler, der bei jedem Tastendruck ausgelöst wird, wahrscheinlich hier, ja, im Reduzierer sollte ich 101 00:09:26,920 --> 00:09:30,000 natürlich die Aktion überprüfen. 102 00:09:30,000 --> 00:09:32,490 isValid, nicht nur isValid, ich muss 103 00:09:32,730 --> 00:09:37,470 dies aus der Aktion herausholen. Lassen Sie uns mit diesem 104 00:09:37,480 --> 00:09:42,240 Fix hier zurückgehen und es erneut versuchen. Wenn ich anfange zu tippen, wird dies gelöscht. 105 00:09:42,270 --> 00:09:46,530 Wenn ich dies zurücksetze, kommt mein Fehler jedoch nicht zurück, so dass dies ein kleiner 106 00:09:46,530 --> 00:09:50,800 Fehler ist, den wir beheben müssen. Für den Preis wird 0 107 00:09:50,800 --> 00:09:55,330 dann nicht als gültig behandelt, einer auch nicht. Die Validierung hat 108 00:09:55,350 --> 00:09:58,590 also einige Probleme, aber die Eingabe usw. funktioniert, 109 00:09:58,590 --> 00:10:03,490 aber lassen Sie uns sehen, was jetzt mit der Validierung nicht stimmt. 110 00:10:03,500 --> 00:10:07,090 Natürlich funktioniert die Validierung hier nicht, wir verwenden sie nicht. 111 00:10:07,100 --> 00:10:12,290 Bitte denken Sie daran, dass ich immer überprüfe, ob diese Art der Validierung für diese Eingabe oder diesen Typ oder diesen Typ aktiviert ist, und wir 112 00:10:12,290 --> 00:10:17,000 tun dies mit Hilfe dieser speziellen Requisiten, die wir einstellen müssen. Derzeit ist keine 113 00:10:17,030 --> 00:10:22,980 Validierung aktiviert, daher werden nur die ungültigen Standardwerte berücksichtigt. 114 00:10:23,060 --> 00:10:28,610 Wenn ich zum Bildschirm zum Bearbeiten von Produkten gehe, aktivieren wir diese spezielle Validierung jetzt, indem wir 115 00:10:28,610 --> 00:10:39,170 die richtigen Requisiten festlegen, z. B. hier für die Titeleingabe. Auf der imageUrl ebenfalls erforderlich. Auf den Preis hier, erforderlich und vielleicht 116 00:10:39,470 --> 00:10:47,540 auch min gleich Null, so dass Null die Mindestanzahl ist, die wir eingeben müssen, oder eine 117 00:10:47,540 --> 00:10:48,350 Zahl 118 00:10:48,380 --> 00:10:58,480 größer als diese tatsächlich, also vielleicht 0. 1 ist unsere Mindestanzahl. Für die Beschreibung sollte auch erforderlich sein und möglicherweise auch eine 119 00:10:58,540 --> 00:11:05,100 Mindestlänge von 5, um mindestens 5 Zeichen zu haben. Es gibt noch eine zusätzliche Sache, die wir hier im 120 00:11:05,100 --> 00:11:11,070 Bildschirm zum Bearbeiten des Produkts tun müssen. Dieser Handler für Eingabewechsel muss hier natürlich auch zu jeder 121 00:11:11,130 --> 00:11:16,870 Eingabe hinzugefügt werden, nicht nur zur Titeleingabe. Wir müssen dies also für die 122 00:11:16,870 --> 00:11:26,760 imageUrl hinzufügen, andernfalls wird später eine Fehlermeldung angezeigt. Wir müssen dies hier zur Preiseingabe hinzufügen. Wir müssen dies hier natürlich auch zur Beschreibungseingabe 123 00:11:26,760 --> 00:11:30,580 hinzufügen und den Bezeichner ersetzen auf die richtige Weise. 124 00:11:32,810 --> 00:11:36,010 Lassen Sie uns dies testen und Sie werden etwas 125 00:11:36,040 --> 00:11:39,000 Seltsames bemerken, wenn Sie hier tippen, das funktioniert, wenn 126 00:11:39,000 --> 00:11:41,210 Sie imageUrl eingeben, nicht richtig 127 00:11:41,220 --> 00:11:47,300 funktioniert, die Validierung nicht aktualisiert wird und Sie zumindest auch nicht zurückkehren können das könnte stecken bleiben. 128 00:11:47,310 --> 00:11:54,990 Wenn wir dies also mit einem Befehlsfehler oder zweimaligem Drücken von R auf Android neu laden und dies hier erneut versuchen, 129 00:11:55,010 --> 00:12:00,950 sagen wir zum Preis, Sie werden feststellen, dass dies funktioniert, aber warum funktioniert es nicht und 130 00:12:00,950 --> 00:12:05,630 das gleiche wäre übrigens der Fall Wenn Sie es auf der imageUrl 131 00:12:05,670 --> 00:12:10,200 versucht haben, funktioniert dies hier. Warum funktioniert es, wenn ich zuvor eine andere Eingabe bearbeitet 132 00:12:10,200 --> 00:12:15,100 habe, weil es jetzt beispielsweise bei einem Titel nicht mehr funktioniert? Und das Problem hängt damit zusammen, dass es hier stecken bleibt. 133 00:12:15,390 --> 00:12:22,500 Wir rendern diese Komponente viel zu oft neu und der Grund dafür ist wirklich schwer zu finden. 134 00:12:23,010 --> 00:12:24,980 Am Ende haben wir hier eine 135 00:12:24,990 --> 00:12:27,290 Art Endlosschleife und das Problem ist unser Eingabewechsel-Handler. 136 00:12:27,420 --> 00:12:34,290 Wir verwenden hier den Rückruf, um unnötige Neuerstellungen zu vermeiden, aber wenn wir ihn dann so binden, machen wir 137 00:12:34,290 --> 00:12:40,710 ihn irgendwie veraltet. Das macht jetzt keinen Unterschied mehr, da dadurch für jeden erneuten Renderzyklus eine neue 138 00:12:40,800 --> 00:12:42,230 Funktionsbindung erstellt wird. 139 00:12:42,750 --> 00:12:49,590 Am Ende müssen wir also die Bindung hier entfernen und sie an all diesen Stellen hier 140 00:12:49,590 --> 00:12:51,550 entfernen, da dies 141 00:12:51,780 --> 00:12:56,980 unsere App beschädigen wird. Dies führt zu zu vielen Wiederholungszyklen, da der 142 00:12:57,210 --> 00:13:01,200 Rückruf keine Wirkung hat und wir dies möglicherweise tun 143 00:13:01,200 --> 00:13:05,850 Ich möchte eine ID-Requisite des Titels usw. an unsere Eingabekomponente weiterleiten. 144 00:13:06,050 --> 00:13:14,200 Fügen wir dies also zu all diesen Eingaben hinzu. Diese ID-Requisite ist im Grunde das, was ich zuvor im Bindungsaufruf hinzugefügt habe. Wir leiten dies also 145 00:13:14,260 --> 00:13:18,860 einfach an die Eingabekomponente weiter, damit wir es dort verwenden können. Lassen Sie uns dies 146 00:13:18,880 --> 00:13:23,430 für alle diese Eingaben hier und tun Wie können wir das jetzt nutzen? 147 00:13:23,470 --> 00:13:27,910 Nun, innerhalb der Eingabe haben wir jetzt diese ID-Requisite direkt verfügbar, 148 00:13:27,910 --> 00:13:30,820 sodass wir sie dort einfach anhängen können. 149 00:13:30,880 --> 00:13:38,280 Hier können wir also Requisiten weiterleiten. id oder einfach ID, damit wir hier keine Requisiten hinzufügen müssen 150 00:13:38,280 --> 00:13:44,370 und stattdessen die ID hier aus den Requisiten herausziehen müssen, wie wir es bei der Eingabeänderung getan haben, und 151 00:13:44,470 --> 00:13:50,470 ID als Abhängigkeit von diesem Effekt danach hinzufügen. Und jetzt leiten wir den Bezeichner dieser 152 00:13:50,830 --> 00:13:55,630 Eingabe weiter, aber auf eine elegantere Weise, die die Verwendung von bind vermeidet, 153 00:13:55,630 --> 00:13:59,000 die letztendlich diese Funktion für jeden Renderzyklus neu erstellt 154 00:13:59,140 --> 00:14:03,430 und somit zu einer Endlosschleife führt, und daher jetzt, wenn wir dies 155 00:14:06,890 --> 00:14:15,490 und uns neu laden Gehen Sie hier zum Admin-Bereich, jetzt kann ich hier und auch hier etwas eingeben und jetzt funktioniert dies, da wir 156 00:14:15,490 --> 00:14:19,660 jetzt diesen unendlichen Renderzyklus vermeiden und die Validierung erhalten, wie wir wollten. 157 00:14:19,690 --> 00:14:26,170 Dies ist nun mein Ansatz oder dies ist der Ansatz, den ich Ihnen hier zeigen wollte, mit dem Sie eine 158 00:14:26,170 --> 00:14:31,630 wiederverwendbare Eingabekomponente verwenden können, die ihre eigene Validierung durchführt, die Sie von außen konfigurieren können und in 159 00:14:31,630 --> 00:14:33,960 der Sie das Gesamtformular noch verwalten können. 160 00:14:34,060 --> 00:14:36,120 Lassen Sie uns damit in 161 00:14:36,220 --> 00:14:42,070 eine Feinabstimmung eintauchen, wie zum Beispiel das Stylen dieser angezeigten Fehlermeldung, dieser Validierungsfehlermeldung und das Steuern, wann 162 00:14:42,070 --> 00:14:45,310 wir sie anzeigen, weil ich sie nicht immer anzeigen möchte.