erstellt haben.
Zu diesem Zeitpunkt ist es aufgrund der Wiederholung von IDs nicht mehr auf derselben Ansicht oder Seite mehrere Toggle -Switch -Schieberegler auf derselben Ansicht oder Seite zu haben. Obwohl wir die Art der Komponentierung von React hier nutzen könnten, werden wir Requisiten verwenden, um die Werte dynamisch zu bevölkern:
this.Props.name wird die Werte von ID, Name und für (beachten Sie, dass es in React JS) dynamisch html ist, damit Sie unterschiedliche Werte an die Komponente übergeben und mehrere Instanzen auf derselben Seite haben.
Überprüfen Sie die Ausgabe unter http: // localhost: 3000/(möglicherweise mit den Entwickler -Tools Ihres Browsers) und stellen Sie sicher, dass alles richtig funktioniert.
installieren.
Hinweis Nun zum Styling. Dies ist eine grobe Übersicht darüber, was wir für das Styling unseres React -Schalttastes suchen.
Und so sieht das in SCSS aus. Fügen Sie Folgendes zu SRC/TogglesSwitch/ToggleSwitch.scss:
hinzu
Nehmen Sie sich auch eine Weile, um den obigen Code zu durchlaufen. Wenn Sie sich nicht sicher sind, können Sie die SASS -Dokumentation konsultieren oder eine Frage in den sitePoint -Foren stellen.
Um die Komponente flexibler zu gestalten, können wir diese dynamisch aus der Steuerung mit html5 data-attributes :
abrufen
Wir werden die Datenattribute für das Testen härten, machen dies jedoch in der endgültigen Version flexibler:
Außerdem wäre es eine gute Idee, eine kleinere Version der Switch -Komponente ohne den Text für kleinere Bildschirme zu verwenden. Fügen wir also das Styling mit einigen minimalen Größen hinzu und entfernen Sie den Text:
In Bezug auf die Reaktionsfähigkeit sollten wir die vollständige Größe ändern. Verwenden wir also die CSS -Skala -Funktion. Hier haben wir alle Bootstrap-basierten Reaktionsbreiten von Geräten abgedeckt.
in TogglesSwitch.js: hinzufügen:
import React, { Component } from "react";
class ToggleSwitch extends Component {
render() {
return (
<div className="toggle-switch">
<input
type="checkbox"
className="toggle-switch-checkbox"
name="toggleSwitch"
/>
<label className="toggle-switch-label" htmlFor="toggleSwitch">
<span className="toggle-switch-inner" />
<span className="toggle-switch-switch" />
</label>
</div>
);
}
}
export default ToggleSwitch;
Gehen Sie zurück zum Dev -Server und testen Sie Ihre Änderungen. Wenn Sie überprüfen möchten, was Sie gegen die fertige SCSS -Datei haben, können Sie dies hier finden .
Schritt 6 - Themen in SCSS
Da wir Variablen in SCSS verwenden können, ist es einfacher, Unterstützung für mehrere Farbthemen hinzuzufügen. Sie können mehr darüber in " Sass Theming: The Never Ending Story " lesen. Wir werden hier einige Farbthemen verwenden und alle Rohfarben in Variablen ändern. Die ersten drei Zeilen sind ein konfigurierbares Farbensatz, was uns hilft, unsere kleine Kontrolle zu thematisieren:
create-react-app toggleswitch
Und das war es mit dem Styling. Fügen wir nun etwas Interaktivität hinzu.
Schritt 7 - Interaktionen und JavaScript
Bitte beachten Sie, dass der folgende Abschnitt nur Demo -Code enthält, um die Konzepte zu erklären. In diesem Abschnitt sollten Sie Ihre tatsächliche ToggleSwitch -Komponente nicht aktualisieren.
Unsere Grundkomponente ist eine dumme Komponente (oder Präsentationskomponente), deren Zustand von einer übergeordneten Komponente oder einem übergeordneten Container wie einem Formular gesteuert wird. Was meinen wir unter kontrolliert? Schauen wir uns zuerst eine unkontrollierte Version an:
mkdir src/ToggleSwitch
Wenn Benutzer mit der oben genannten Kontrollkästchen -Eingabe interagieren, wechselt es zwischen einem überprüften und nicht überprüften Status von selbst, ohne dass wir JavaScript schreiben müssen. HTML -Eingabelemente können ihren eigenen internen Zustand verwalten, indem das DOM direkt aktualisiert wird.
In React wird jedoch empfohlen, kontrollierte Komponenten zu verwenden, wie im folgenden Beispiel gezeigt:
touch ToggleSwitch.js ToggleSwitch.scss
Hier steuert React den Status des Kontrollkästcheneingangs. Alle Interaktionen mit dieser Eingabe müssen das virtuelle DOM durchlaufen. Wenn Sie versuchen, mit der Komponente so zu interagieren, wird nichts passieren, da wir keinen JavaScript -Code definiert haben, der den Wert der überprüften Requisiten ändern kann.
Um dies zu beheben, können wir eine Onchange -Requisite übergeben - eine Funktion, die aufgerufen werden kann, wenn das Kontrollkästchen klickt:
import React from 'react';
import ToggleSwitch from './ToggleSwitch/ToggleSwitch'
function App() {
return (
<ToggleSwitch />
);
}
export default App;
Jetzt ist die Checkbox -Eingabe interaktiv. Benutzer können die Komponente "Ein" und "aus" genau wie zuvor umschalten. Der einzige Unterschied besteht darin, dass der Staat im Gegensatz zu der früheren unkontrollierten Version durch React kontrolliert wird. Auf diese Weise können wir über JavaScript problemlos auf den Zustand unserer Komponente zugreifen. Wir können den Anfangswert auch leicht definieren, wenn wir die Komponente deklarieren.
Schauen wir uns nun an, wie wir dies in der ToglleSwitch -Komponente verwenden können. Unten finden Sie ein vereinfachtes klassenbasiertes Beispiel:
<input type="checkbox" name="name" />
Konvertieren wir nun die klassenbasierte Komponente in eine Funktionskomponente mit Hooks:
<div >
<input type="checkbox" name="toggleSwitch" />
<label for="toggleSwitch">
Toggle Me!
</label>
</div>
Wie Sie sehen, haben wir die Anzahl der Linien mithilfe funktionaler Komponenten und der Erstellungsmethode von Hooks drastisch reduziert.
.
Wenn React -Hooks für Sie neu sind, " React Hooks: So starten Sie und bauen Sie Ihr eigenes
".
Schritt 8 - Fertigstellung der ToggleSwitch -Komponente
Kommen wir nun zu unserer Togleswitch -Komponente zurück. Wir benötigen die folgenden Requisiten:
ID (erforderlich): Dies ist die ID, die an die Kontrollsteuerung für das Kontrollkästchen übergeben wird. Ohne sie wird die Komponente nicht rendern.
überprüft (erforderlich): Dies hält den aktuellen Zustand, der ein boolescher Wert ist.
onchange (erforderlich): Diese Funktion wird aufgerufen, wenn der Onchange -Event -Handler der Eingabe ausgelöst wird.
Name (optional): Dies ist der Beschriftungstext der Kontrollkästchen -Eingabe, aber wir werden ihn im Allgemeinen nicht verwenden.
klein (optional): Dieser Boolesche Wert macht den Kippschalter in einem kleinen Modus, ohne den Text zu rendern.
OptionLabels (optional): Wenn Sie die kleine Version des Steuerelements nicht verwenden, müssen Sie dies möglicherweise als Array von zwei Werten an den Toggle -Switch weitergeben, der den Text für True und False bedeutet. Ein Beispiel wäre text = {["Ja", "Nein"]}.
deaktiviert (optional): Dies wird direkt an die . übergeben
Wenn die kleine Version nicht verwendet wird, wird der folgende OptionLabels -Text als Standard verwendet:
create-react-app toggleswitch
Da die meisten Requisiten vom Benutzer festgelegt werden müssen und wir keine willkürlichen Werte verwenden können, ist es immer besser, das Rendern einzustellen, wenn die erforderlichen Requisiten nicht weitergegeben werden. Dies kann mit einem einfachen JavaScript erfolgen, wenn es sich Anweisung oder ein ternärer Operator? : Oder ein kurzer Kreislauf &&:
mkdir src/ToggleSwitch
Wenn unsere App wächst, können wir viele Fehler durch Typ-Überprüfungen fangen. React verfügt über einige integrierte Fähigkeiten zur Überprüfung von Typen. Um die Typ -Überprüfung der Requisiten für eine Komponente auszuführen, können Sie die spezielle ProfTypes -Eigenschaft zuweisen. Wir können die obige Liste der Requisiten mithilfe von React ProTType -Bibliothek durchsetzen, einer separaten Bibliothek, in der eine Reihe von Validatoren exportiert werden, mit denen sichergestellt werden kann, dass die von Ihnen erhaltenen Daten gültig sind.
Sie können es so installieren wie so:
touch ToggleSwitch.js ToggleSwitch.scss
Importieren Sie dann die ProfTypes -Bibliothek mit:
import React from 'react';
import ToggleSwitch from './ToggleSwitch/ToggleSwitch'
function App() {
return (
<ToggleSwitch />
);
}
export default App;
wir definieren die ProfTypen auf folgende Weise:
<input type="checkbox" name="name" />
als Erklärung:
ProTtypes.String.isRequired: Dies ist ein Stringwert, und es ist erforderlich und obligatorisch.
ProfTypes.String: Dies ist ein Stringwert, aber es ist nicht obligatorisch.
ProfTypes.func: Diese Requisite übernimmt eine Funktion als Wert, ist aber nicht obligatorisch.
pottypes.bool: Dies ist ein boolescher Wert, aber es ist nicht obligatorisch.
pottypes.Array: Dies ist ein Array -Wert, aber es ist nicht obligatorisch.
Jetzt können wir mit der ToggleSwitch -Komponente weitermachen. Ersetzen Sie den Inhalt von SRC/ToggleSwitch/TogglesSwitch.js durch Folgendes:
<div >
<input type="checkbox" name="toggleSwitch" />
<label for="toggleSwitch">
Toggle Me!
</label>
</div>
Um die Komponente zu testen, aktualisieren Sie die App.js mit dem folgenden Code:
create-react-app toggleswitch
Wenn Sie nun zu http: // localhost: 3000/ gehen, sollten Sie den Arbeitsumschalter sehen.
Schaltfläche Umschalten
Schritt 9 - Machen Sie die Komponenten -Tastatur zugänglich
Der letzte Schritt besteht darin, unsere Komponenten -Tastatur zugänglich zu machen. Ändern Sie zuerst das Etikett wie unten:
mkdir src/ToggleSwitch
Wie Sie sehen können, haben wir eine Tabindex-Eigenschaft hinzugefügt, die wir auf 1 (fokussierbar) oder -1 (nicht fokussierbar) einstellen, je nachdem, ob die Komponente derzeit deaktiviert ist.
Wir haben auch eine Handelskekeypress -Funktion deklariert, um die Tastatureingabe zu erhalten:
touch ToggleSwitch.js ToggleSwitch.scss
Dies überprüft, ob die gedrückte Taste die Space -Leiste ist. In diesem Fall verhindert es die Standardaktion des Browsers (in diesem Fall scrollen Sie die Seite) und schaltet den Zustand der Komponente um.
Und das ist im Wesentlichen alles, was Sie brauchen. Die Komponente ist jetzt auf Tastatur zugegriffen.
Es gibt jedoch ein geringes Problem. Wenn Sie auf die Komponente des Umschaltensschalters klicken, erhalten Sie einen Überblick über die gesamte Komponente, die wahrscheinlich nicht erwünscht ist. Um dies zu bekämpfen, können wir die Dinge leicht verändern, um sicherzustellen, dass es einen Umriss erhält, wenn es sich auf die Tastatur konzentriert, jedoch nicht, wenn sie geklickt wird:
import React from 'react';
import ToggleSwitch from './ToggleSwitch/ToggleSwitch'
function App() {
return (
<ToggleSwitch />
);
}
export default App;
Hier haben wir beide inneren Elemente eine Tabindex -Eigenschaft hinzugefügt, um sicherzustellen, dass sie keinen Fokus erhalten können.
Aktualisieren Sie dann die Datei ToggleSwitch.scss mit dem folgenden Code, um einen Stil auf das innere Element des ToggleSwitch anzuwenden, wenn sie sich auf die Tastatur konzentriert, jedoch nicht, wenn sie geklickt wird.
<input type="checkbox" name="name" />
Sie können mehr über diese Technik erfahren hier . Es ist etwas hackig und sollte zugunsten von verwendet werden: Fokus-sichtbar , sobald dies weit genug Browser-Unterstützung gewinnt.
Wenn Sie die Anwendung ausführen, sollten Sie in der Lage sein, die Komponente mit der Speicherleiste umzuschalten.
Tastaturgerechtes Umschalter
Ein vollständigeres Beispiel
Um fertig zu werden, möchte ich ein umfassenderes Beispiel für die Verwendung der Toggelsschalterkomponente in der folgenden Codesandbox zeigen.
Diese Demo verwendet auf derselben Seite mehrere ToggleSwitch -Komponenten. Der Zustand der letzten drei Umschaltungen hängt vom Zustand des ersten ab. Das heißt, Sie müssen Marketing -E -Mails akzeptieren, bevor Sie Ihre Wahl für die erhalten können.
Zusammenfassung
In diesem Artikel habe ich gezeigt, wie man eine wiederverwendbare, iOS-inspirierte React-Toggle-Komponente mit React erstellt. Wir haben uns mit dem Styling der Komponente mit SCSS angesehen, sie zu einer kontrollierten Komponente gemacht, sie durch Übergeben von Requisiten anpassen und die Tastatur zugänglich gemacht.
Sie können den vollständigen Code für die React -Umschaltkomponente in unserem github repo .
finden
FAQs zum Erstellen eines Kippschalters in React als wiederverwendbare Komponente
Wie kann ich das Erscheinungsbild meines React -Kippschalters anpassen?
Das Anpassen des Aussehens Ihres React -Kippschalters ist recht einfach. Sie können die CSS -Eigenschaften so ändern, dass sie Ihren Entwurfsanforderungen entsprechen. Zum Beispiel können Sie die Hintergrundfarbe, die Randfarbe, die Größe und die Form des Schalters ändern. Sie können auch Animationen oder Übergänge für eine interaktivere Benutzererfahrung hinzufügen. Denken Sie daran, Ihre Änderungen im Einklang mit Ihrem allgemeinen Anwendungsdesign für ein nahtloses Benutzererlebnis zu halten.
Kann ich die Switch -Taste -Reaktionskomponente mit Funktionskomponenten verwenden?
Ja, Sie können den React -Kippschalter mit Funktionskomponenten verwenden. Der Prozess ähnelt der Verwendung mit Klassenkomponenten. Sie müssen nur die Switch -Komponente in Ihrer Funktionskomponente importieren und verwenden. Sie können auch Hooks wie Usestate verwenden, um den Status des Schalters zu verwalten.
Wie kann ich meine Switch -Taste reagieren lassen, die Komponente zugänglich ist?
Die Zugänglichkeit ist ein entscheidender Aspekt der Webentwicklung. Um Ihren React -Toggle -Switch zugänglich zu machen, können Sie ARIA -Attribute (Accessable Rich Internet Applications) verwenden. Zum Beispiel können Sie das Attribut „ARIA-Checked“ verwenden, um den Status des Schalters anzuzeigen. Sie können auch die Tastaturunterstützung hinzufügen, damit Benutzer den Schalter mit der Tastatur umschalten können.
Wie kann ich meine React -Switch -Komponente testen?
Tests sind ein wesentlicher Bestandteil des Entwicklungsprozesses. Sie können Testbibliotheken wie Scherz- und React -Testbibliothek verwenden, um Ihre React -Switch -Komponente zu testen. Sie können Tests schreiben, um zu prüfen, ob der Schalter beim Klicken korrekt umschaltet und korrekt rendert und Requisiten korrekt behandelt.
Kann ich den React -Kippschalter mit Redux verwenden?
Ja, Sie können den React -Kippschalter mit Redux verwenden. Sie können den Status des Schalters mit Redux -Aktionen und Reduzierern verwalten. Dies kann besonders nützlich sein, wenn der Status des Schalters über mehrere Komponenten hinweg geteilt werden muss oder wenn er den globalen Zustand Ihrer Anwendung beeinflusst.
Wie kann ich meinem React -Toggle -Switch ein Etikett hinzufügen?
Hinzufügen einer Etikett zu Ihrem React -Toggle -Switch kann die Benutzerfreundlichkeit verbessern. Sie können ein Etikett hinzufügen, indem Sie die React -Switch -Komponente in ein "Etikett" -Element einwickeln. Sie können auch das Attribut „HTMLFor“ verwenden, um das Etikett mit dem Switch zu verknüpfen.
Wie kann ich Fehler in meiner React -Toggle -Switch -Komponente umgehen?
Fehlerbehebung ist ein wichtiger Bestandteil jeder Komponente. In Ihrer React-Toggle-Switch-Komponente können Sie Try-Catch-Blöcke verwenden, um Fehler zu verarbeiten. Sie können auch Fehlergrenzen verwenden, eine React -Funktion, die Fehler in Komponenten fängt und behandelt.
Kann ich den React -Kippschalter in einem Formular verwenden?
Ja, Sie können den React -Kippschalter in Form eines Formulars verwenden. Sie können den Zustand des Schalters im Zustand des Formulars bewältigen. Sie können auch die Formulareingabe behandeln und den Status des Schalters verwenden, um bestimmte Aktionen auszuführen.
Wie kann ich meinen React -Toggle -Switch animieren?
Animierung Ihres React -Toggle -Switch kann die Benutzererfahrung verbessern. Sie können CSS -Übergänge oder Animationen verwenden, um den Schalter zu animieren, oder Sie können Bibliotheken wie React Spring für komplexere Animationen verwenden.
Kann ich den React -Toggle -Switch mit TypeScript verwenden?
Ja, Sie können den React -Kippschalter mit TypeScript verwenden. Sie müssen nur die Typen der Requisiten und den Status des Switchs definieren. Dies kann Ihnen dabei helfen, Fehler während der Entwicklung zu fangen und Ihren Code robuster und wartbarer zu machen.
Wie kann ich die Leistung von Schaltschaltschaltungen optimieren?
Sie können die Leistung Ihres React-Toggle-Schalters mithilfe der Memo-Funktion von React optimieren, um unnötige Neuanfänger zu verhindern.
Wie kann ich die Statusverwaltung für mehrere Toggle -Switches in einer einzigen Form bewältigen?
Sie können den Status mehrerer Kippschalter in einer einzigen Form verwalten, indem Sie ein Objekt verwenden, um den Status jedes Schalters zu speichern. Auf diese Weise können Sie einfach auf den Status jedes Schalters aktualisieren und zugreifen, wodurch Ihr Formular zur Handhabung effizienter wird.