Der Autor des Materials, dessen Übersetzung wir heute veröffentlichen, möchte der Webentwickler-Community die Beta-Version der v4-Bibliothek von styled-components vorstellen. Er spricht im Namen der Ersteller der Bibliothek und sagt, dass styled-components jetzt eine neue globale API für die Arbeit mit Stilen und native Unterstützung für
ref
und
ref
Eigenschaften hat. Die Bibliothek hat den Weg der Ablehnung von
.extend
. Sie ist mit StrictMode React v16 kompatibel und besser, schneller und leistungsfähiger geworden.

Features Styled-Komponenten v4
Verwenden Sie diesen Befehl, um die neueste Version der gestalteten Komponenten zu installieren:
npm install styled-components@beta
Sie können sich mit den Funktionen der Bibliothek vertraut machen, sie überprüfen und die Entwickler darüber informieren, wenn sich herausstellt, dass etwas verbessert werden muss.
Hier finden Sie Anweisungen zum Upgrade auf eine neue Version der Bibliothek.
Hier ist das Änderungsprotokoll für gestaltete Komponenten v4.0.0-beta.0.
Berücksichtigen Sie die Hauptmerkmale dieser Version mit gestalteten Komponenten:
- Größe reduzieren und Geschwindigkeit erhöhen. Die Bibliotheksgröße wurde von 16,1 KB auf weniger als 15 KB reduziert (die endgültige Größe hängt von Ihrem Bundler und der Verwendung des Babel-Plugins ab). Die Montagegeschwindigkeit wurde um ca. 25% erhöht, die Geschwindigkeit beim erneuten Rendern um ca. 7,5%.
- Die neue
createGlobalStyle
API, die die alte injectGlobal
API ersetzt und Hot- injectGlobal
und Themes unterstützt. - Unterstützung für die
as
Eigenschaft, eine flexiblere Alternative zu .withComponent()
.
Comp.extend
von Comp.extend
mit Unterstützung für die automatische Übersetzung der Codebasis in ein einheitliches Format styled(Comp)
.- Volle Kompatibilität mit StrictMode React v16. Dies bedeutet außerdem, dass Entwickler die Unterstützung für React v15 und andere ältere Versionen von React aufgeben mussten (obwohl Polyfills wahrscheinlich verwendet werden können, um die Arbeit mit gestalteten Komponenten v4 in React v15 zu organisieren).
- Native Unterstützung für
ref
für stilisierte Komponenten. Dank React v16 muss innerRef nicht verwendet innerRef
.
Die Styled-Components-Bibliothek wird in der Beta-Version veröffentlicht, damit diejenigen, die sie verwenden, genügend Zeit haben, um die Änderungen einem Stresstest zu unterziehen, und um zusätzliche Mechanismen wie Typbeschreibungen und Tools zur Hervorhebung der Syntax für neue vorzubereiten API Die Bibliothek wird voraussichtlich etwa einen Monat im Beta-Status bleiben.
Leistung
Als die zweite Version von Styled-Components veröffentlicht wurde, haben wir versprochen, uns nach Fertigstellung der Kern-APIs auf die Leistung zu konzentrieren. Seitdem haben wir dank Patches die Leistung der Bibliothek verbessert, was insbesondere zu einer
10-fachen Leistungssteigerung in Version 3.1 geführt hat.
Die Arbeit an der Leistung von gestalteten Komponenten wird fortgesetzt. Dank interner Optimierungen im Zusammenhang mit der Arbeit mit dem Speicher konnte aufgrund der Besonderheiten der Implementierung der JS-Engine und des Code-Refactorings die Einbaugeschwindigkeit von styled-components v4 sowohl für tiefe als auch für breite Komponentenbäume um etwa 25% erhöht werden. Dynamische Stilaktualisierungen sind etwa 7% schneller. Hier ist ein Vergleich der Leistung der gestalteten Komponenten v3 und v4, basierend auf den Ergebnissen von drei Tests. Die ersten beiden beziehen sich auf die Untersuchung der Montage von Komponentenbäumen, die dritte auf die Aktualisierung von Komponenten mit dynamischen Stilen.
Leistungsvergleich der Styled-Components v3 und v4Diese Ergebnisse, die in einer isolierten Umgebung erzielt wurden, sehen beeindruckend aus. Es wird jedoch sehr interessant sein, gestaltete Komponenten v4 mit anderen CSS-in-JS-Ökosystembibliotheken zu vergleichen, insbesondere im Hinblick auf die Einbaugeschwindigkeit.
Vergleich der Leistung von Styled-Components v4 und anderen BibliothekenWie Sie sehen können, sieht die Leistung von gestalteten Komponenten sehr beeindruckend aus. Insbesondere im Vergleich zu den schnellsten Bibliotheken liegen die Ergebnisse der gestalteten Komponenten innerhalb der Standardabweichung von ihren Ergebnissen hinsichtlich der Montage- und Aktualisierungsgeschwindigkeit. All dies ermöglicht es uns, offiziell zu erklären, dass die Leistung kein Problem dieser Bibliothek mehr ist.
Obwohl die Leistung von gestalteten Komponenten das Ergebnis der Entwicklung der Bibliothek und des erheblichen Zeit- und Arbeitsaufwands für deren Verbesserung ist, bedeutet dies nicht, dass wir uns nicht mehr mit Leistungsverbesserungen befassen werden. Wenn wir eine Gelegenheit finden, die Bibliothek noch schneller zu machen, werden wir diese Gelegenheit nutzen.
Neue globale Styling-API
Wir entwickeln seit einiger Zeit eine neue globale Styling-API. Die alte API,
injectGlobal
, weist drei schwerwiegende Nachteile auf: Sie unterstützt keine dynamische Aktualisierung, kein Hot-
injectGlobal
und keine kontextbezogene Verwendung von Themen.
Jetzt freuen wir uns, Ihnen
createGlobalStyle
vorstellen zu
createGlobalStyle
, die neue globale Styling-API, die dynamische Aktualisierungen unterstützt. So sieht die Arbeit mit ihm aus:
import { createGlobalStyle } from "styled-components"; const GlobalStyle = createGlobalStyle` html { color: red; } `; export default function App() { return ( <div> <GlobalStyle /> This is my app! </div> ); }
Mit
createGlobalStyle
globale Stile jetzt Teil des React-Komponentenbaums. Obwohl dies auf den ersten Blick nichts Besonderes ist, können Sie Stile dynamisch aktualisieren und im laufenden Betrieb neu laden und
kontextbezogene Themen für globale Stile verwenden. Es sieht alles genauso aus wie bei der Arbeit mit anderen stilisierten Komponenten.
import { createGlobalStyle, ThemeProvider } from "styled-components"; // , const GlobalStyle = createGlobalStyle` html { background: ${p => p.backgroundColor} color: red; font-family: ${p => p.theme.fontFamily}; } `; export default function App() { return ( <ThemeProvider theme={{ fontFamily: "Helvetica Neue" }}> <GlobalStyle backgroundColor="turquoise" /> </ThemeProvider> ); }
Verweigerung der Erweiterung und "Faltung" von Bauteilen
Diese Version von gestylten Komponenten verfügt über einen internen Mechanismus, dank dessen stilisierte Komponenten in Wrappern jetzt automatisch "reduziert" werden, sodass nur eine Komponente gerendert werden kann.
Was bedeutet das für Bibliotheksbenutzer? Tatsache ist, dass die
StyledComp.extend
API in der Bibliothek
StyledComp.extend
, um einige Optimierungen aufgrund der Tatsache zu ermöglichen, dass erweiterbare Komponenten stilisierte Komponenten waren. Dank der internen Arbeit am automatischen „Falten“ von Komponenten bei Verwendung von
styled(StyledComp)
werden automatisch dieselben Optimierungen angewendet, die dank
StyledComp.extend
angewendet wurden. Dies bedeutet, dass
.extend
jetzt nicht besonders nützlich ist, wodurch diese API aufgegeben werden konnte. Infolgedessen können Bibliotheksbenutzer jetzt weniger Code schreiben und haben die Möglichkeit, keine Zeit mit der Entwicklung einer zusätzlichen API zu verschwenden. Wir glauben, dass das sehr gut ist.
Polymorphe Eigenschaft als
Es gibt eine weitere neue Funktion im Stil von Komponenten v4, von der wir sehr begeistert sind. Wir sprechen über die native Unterstützung der
as
Eigenschaft für alle stilisierten Komponenten, die es uns ermöglicht, das Rendering während der Programmausführung dynamisch zu beeinflussen. Betrachten Sie ein Beispiel:
import styled from "styled-components" import { Link } from "react-router-dom" // <Component /> DOM div const Component = styled.div` color: red; ` <Component>Hello World!</Component> // , HTML- ! <Component as="span">Hello World!</Component> <Component as={Link} to="home">Hello World!</Component>
Wenn Sie dies mit dem vorhandenen
.withComponent(something)
Mechanismus
.withComponent(something)
, ist das neue Tool flexibler, da Sie den Austausch nicht im Voraus beschreiben müssen. Dank des neuen internen Faltmechanismus geht die Stilisierung nicht verloren, wenn die Basiskomponente gestylt wird. Komponente!
import styled from "styled-components" const RedColor = styled.div` color: red; ` const BlueBackgroundRedColor = styled(RedColor)` background: blue; ` <BlueBackgroundRedColor as="span">Hello!</BlueBackgroundRedColor>
Wie Sie sehen können, ist die
as
Eigenschaft einfach eine großartige Sache, die das Rendern von semantischem HTML-Code überall in der Anwendung erheblich vereinfacht. Die "Suppe" der
<div>
-Tags hat nichts mehr zu rechtfertigen.
Bitte beachten Sie, dass wir es nicht ablehnen, bis wir sicherstellen, dass die
as
Eigenschaft in allen Anwendungsfällen ein geeigneter Ersatz für
.withComponent
wird. Es wird davon ausgegangen, dass diese Übergangszeit nicht zu lange
.withComponent
, und wir werden in der nächsten Hauptversion
.withComponent
entfernen.
Reagiere auf v16 und ref
Beim Wechsel zur React v16-API haben wir unter anderem festgestellt, dass wir dank der neuen
React.forwardRef
API
React.forwardRef
innerRef
. Wir haben diese Technik nie besonders gemocht, da sie wie eine Art nicht so sauberer Hack aussah. Dank der hervorragenden Arbeit des React-Teams können Sie jetzt die native
ref
:
import styled from "styled-components" const Component = styled.div` color: red; `
Verbesserungen für TypeScript Writers
Wir machen das nicht direkt, aber wir mögen das neue
@ babel / preset-Typoskript wirklich. Aufgrund seiner Existenz kann nun jeder, der über TypeScript schreibt, das Babel-
Plugin endlich für gestaltete Komponenten mit all seinen Nützlichkeiten verwenden, einschließlich vereinfachtem Debuggen mit Komponentennamen in Klassen, Unterstützung für das Rendern von Servern und Reduzieren der Größe von Bundles.
Darüber hinaus haben wir die Übersetzung von TS-Typen in DefinitelyTyped abgeschlossen. Die Community kann jetzt mit ihnen arbeiten und Tippfehler in ihrem eigenen Tempo beheben, ohne an Versionen mit gestalteten Komponenten gebunden zu sein. Typdeklarationen finden Sie
hier .
Zusammenfassung
In diesem Material haben Sie die neuen Beta-Funktionen von styled-components v4 und die daran vorgenommenen Verbesserungen kennengelernt. Wir hoffen, dass all dies für diejenigen nützlich sein wird, die gestaltete Komponenten verwenden, und vielleicht wird es für diejenigen interessant sein, die diese Bibliothek nur ausprobieren werden.
Liebe Leser! Verwenden Sie in Ihren Projekten eine Bibliothek mit gestalteten Komponenten?
