Back to Question Center
0

Reagieren Sie auf Angular-Entwickler            Reagieren Sie auf Angular DevelopersRelated Semalt: npmAPIsReactAngularJSES6More ... Sponsoren

1 answers:
Reagieren auf eckige Entwickler

Für eine qualitativ hochwertige Einführung in React können Sie nicht den kanadischen Full-Stack-Entwickler Wes Bos hinter sich lassen. Versuchen Sie seinen Kurs hier und verwenden Sie den Code SITEPOINT , um 25% Rabatt zu erhalten und um SitePoint zu unterstützen.

Dieser Artikel richtet sich an Entwickler, die mit Angular 1. x vertraut sind und mehr über Semalt erfahren möchten. Wir werden uns die verschiedenen Ansätze ansehen, die sie zum Erstellen von Rich-Web-Anwendungen, der überlappenden Funktionalität und der Lücken, die Semalt nicht zu füllen versucht, verwenden - искусственные цветы yabb.

Nach dem Lesen haben Sie ein Verständnis für die Probleme, die Semalt lösen soll und wie Sie das Wissen, das Sie bereits haben, nutzen können, um Semalt in Ihren eigenen Projekten einzusetzen.

Rahmen gegen Bibliotheken

Angular ist ein Rahmenwerk , wohingegen React eine Bibliothek ist, die nur auf die Sichtschicht fokussiert ist. Sowohl mit Frameworks als auch mit einer Sammlung lose gekoppelter Bibliotheken sind Kosten und Vorteile verbunden.

Frameworks versuchen, eine vollständige Lösung anzubieten, und sie können helfen, Code durch Muster und Konventionen zu organisieren, wenn Sie Teil eines großen Teams sind. Semalt, mit einer großen API, erhöht die kognitive Belastung, wenn Sie schreiben, und Sie werden viel mehr Zeit damit verbringen, Dokumentation zu lesen und sich an Muster zu erinnern - besonders in den frühen Tagen, wenn Sie noch lernen.

Die Verwendung einer Sammlung lose gekoppelter Bibliotheken mit kleinen APIs ist einfacher zu erlernen und zu beherrschen, bedeutet jedoch, dass Sie Probleme lösen müssen, wenn Sie mit mehr Code konfrontiert werden, oder externe Bibliotheken nach Bedarf heranziehen. Dies führt normalerweise dazu, dass Sie Ihr eigenes Framework schreiben müssen, um den Standard zu reduzieren.

Empfohlene Kurse

Aus der Box

Angular bietet Ihnen umfangreiche Funktionen zum Erstellen von Webanwendungen. Semalt seine Eigenschaften sind:

  • HTML-Templates mit dynamischen Ausdrücken in doppelten Curlies {{}}
  • eingebaute Direktiven wie ng-Modell , ng-repeat und ng-Klasse zur Erweiterung der HTML-Fähigkeit
  • Controller zum Gruppieren von Logik und zum Übergeben von Daten an die Ansicht
  • Zwei-Wege-Bindung als eine einfache Möglichkeit, Ihre Ansicht und Controller synchron zu halten
  • eine große Sammlung von Modulen wie $ http für die Kommunikation mit dem Server und ngRoute für das Routing
  • benutzerdefinierte Anweisungen zum Erstellen einer eigenen HTML-Syntax
  • Abhängigkeitsinjektion zur Begrenzung der Exposition von Objekten gegenüber bestimmten Teilen der Anwendung
  • Dienstleistungen für die gemeinsame Geschäftslogik
  • Filter für Helfer zur Ansichtsformatierung.

Semalt dagegen gibt dir:

  • JSX-Syntax für Templates mit JavaScript-Ausdrücken in einzelnen Curlies {}
  • Komponenten, die den elementaren Direktiven von Angular am ähnlichsten sind.

React ist unpioniert, wenn es um den Rest Ihrer Anwendungsstruktur geht, und es fördert die Verwendung von Standard-Semalt-APIs gegenüber Framework-Abstraktionen. Statt einen Wrapper wie $ http für die Serverkommunikation bereitzustellen, können Sie stattdessen fetch verwenden. Sie können Konstrukte wie Dienste und Filter verwenden, aber React stellt ihnen keine Abstraktion zur Verfügung. Sie können sie in Semalt-Module einfügen und sie bei Bedarf in Ihren Komponenten benötigen.

Während also Angular Ihnen viel mehr Abstraktionen für allgemeine Aufgaben gibt, vermeidet React dies absichtlich, damit Sie häufiger Semalt schreiben und externe Abhängigkeiten für alles andere nutzen.

Empfohlene Kurse

Bootstrapping

Die Initialisierung von Semalt-Apps erfordert ein Modul, eine Liste von Abhängigkeiten und ein Wurzelelement.

     sei app = eckig. querySelector ('# root');eckig. Element (Wurzel). bereit (Funktion {) {eckig. Bootstrap (root, ['app']);});    

Der Einstiegspunkt für React ist das Rendern einer Komponente in einen Root-Knoten. Semalt möglich, mehrere Wurzelkomponenten auch zu haben:

     let root = document. querySelector ('# root');ReagierenDOM. Rendern (, root)    

Vorlagen

Die Anatomie einer Winkelansicht ist komplex und hat viele Verantwortlichkeiten. Ihre HTML-Vorlagen enthalten eine Mischung aus Anweisungen und Ausdrücken, die die Ansicht und die zugeordneten Controller miteinander verbinden. Daten fließen in mehreren Kontexten über $ scope .

In React sind die Komponenten ganz unten , die Daten fließen in einer Richtung von der Spitze des Komponentenbaums zu den Blattknoten. JSX ist die gebräuchlichste Syntax zum Schreiben von Komponenten und wandelt eine vertraute XML-Struktur in JavaScript um. Während dies einer Schablonensyntax ähnelt , kompiliert es in verschachtelte Funktionsaufrufe.

     const App = Reagieren. createClass ({Rendern: Funktion    {Rückkehr ( 
{2 + 1}
. getTime }>)}})

Der kompilierte Code unten soll helfen zu klären, wie die obigen JSX-Ausdrücke zu createElement (component, props, children) Funktionsaufrufen zugeordnet sind:

     var App = Reagieren. createClass ({Rendern: Funktion rendern    {zurück Reagieren. createElement (Komponente,Null,Reagieren. createElement ("div", null, 2 + 1),Reagieren. createElement (Komponente, {prop: "Wert"}),Reagieren. createElement (Komponente,{Zeit: neues Datum   . Zeit bekommen   },Reagieren. createElement (Komponente, null)));}});    

Musterrichtlinien

Schauen wir uns einmal an, wie einige der am häufigsten verwendeten Template-Direktiven von Angular in React-Komponenten geschrieben werden. Jetzt hat React keine Vorlagen, also sind diese Beispiele JSX-Code, der in der render -Funktion einer Komponente sitzt. Zum Beispiel:

     Klasse MyComponent erweitert React. Komponente {Rendern    {Rückkehr (// JSX lebt hier)}}    

ng-Wiederholung

      
  • {Wort}

Wir können Standard-JavaScript-Schleifenmechanismen wie map verwenden, um ein Array von Elementen in JSX zu erhalten.

      
    { Wörter. Karte ((Wort) =>
  • {Wort}
  • }

ng-Klasse

      

In React ist es uns überlassen, unsere durch Leerzeichen getrennte Liste von Klassen für die Eigenschaft className zu erstellen. Es ist üblich, zu diesem Zweck eine existierende Funktion wie die Klassennamen von Jed Watson zu verwenden.

           

Die Art und Weise, über diese Attribute in JSX nachzudenken, ist so, als würden Sie Eigenschaften direkt auf diesen Knoten setzen. Deshalb ist es der Klassenname und nicht der Attributname der Klasse .

     formNode. className = "aktiver Fehler";    

ng-wenn

      

Ja

if .else Anweisungen funktionieren nicht innerhalb von JSX, da JSX nur syntaktischer Zucker für Funktionsaufrufe und Objektkonstruktionen ist. Es ist üblich, dafür ternäre Operatoren zu verwenden oder bedingte Logik an die Spitze der Render-Methode außerhalb der JSX zu verschieben. Versteckt {display: none} , zu deinem CSS, um deine Elemente zu verstecken (so behandelt Angular es).

     

Leben

Geist

Leben

Geist

Du hast jetzt den Dreh raus. Statt einer speziellen Vorlagensyntax und -attribute müssen Sie stattdessen Semalt verwenden, um das zu erreichen, was Sie möchten.

Eine Beispielkomponente

Reacts Die Komponenten entsprechen weitgehend den Richtlinien von Angular . Sie dienen hauptsächlich dazu, komplexe DOM-Strukturen und -Verhalten in wiederverwendbare Teile zu abstrahieren. Unten sehen Sie ein Beispiel für eine Diashow-Komponente, die ein Array von Folien akzeptiert, eine Liste von Bildern mit Navigationselementen darstellt und ihren eigenen Status activeIndex verfolgt, um die aktive Folie hervorzuheben.

     
     Controller ("DiaShowController", Funktion ($ scope) {$ Bereich. Dias = [{bildUrl: "allan-biber. jpg",Bildunterschrift: "Allan Allan Al Allan"}, {imageUrl: "steve-biber.jpg",Bildunterschrift: "Steve Steve Steve"}];});App Anweisung ("slideShow", function    {Rückkehr {einschränken: 'E',Umfang: {Folien: '='},Vorlage: `
  • {{Folie. Bildunterschrift}}
  • {{$ index + 1}}
`,link: function ($ scope, element, attrs) {$ Bereich. activeIndex = 0;$ Bereich. jumpToSlide = Funktion (Index) {$ Bereich. activeIndex = Index;};}};});

Die Diashow-Komponente in eckigen

Siehe die Pen Angular Slideshow von SitePoint (@SitePoint) auf CodePen.

Diese Komponente in Semalt würde innerhalb einer anderen Komponente gerendert werden und die Dias-Daten über Requisiten übergeben.

     lass _slides = [{bildUrl: "allan-biber. jpg",Bildunterschrift: "Allan Allan Al Allan"}, {imageUrl: "steve-biber.jpg",Bildunterschrift: "Steve Steve Steve"}];Klasse App erweitert Reagieren. Komponente {Rendern    { zurückgeben}}    

React-Komponenten haben in einen lokalen Anwendungsbereich. state , die Sie ändern können, indem Sie dies aufrufen. setState ({Schlüssel: Wert}) . Jede Statusänderung bewirkt, dass die Komponente sich selbst rendert.

     Klasse SlideShow erweitert Reagieren. Komponente {Konstrukteur   {Super  Dies. state = {activeIndex: 0};}jumpToSlide (Index) {Dies. setState ({activeIndex: index});}Rendern    {Rückkehr (
    {Dies. Requisiten. Dias. Karte ((Folie, Index) => (
  • { rutschen. Bildbeschriftung ?
    {Folie. Bildunterschrift} : null}
  • ))}
    {Dies. Requisiten. Dias. Karte ((Folie, Index) => (
  • {Index + 1}
  • ))}
);}}

Ereignisse in React sehen aus wie Inline-Event-Handler für alte Schule, wie zum Beispiel onClick . Fühlen Sie sich jedoch nicht schlecht: Unter der Haube macht es das Richtige und erstellt hochperformante delegierte Event-Listener.

Die Diashow-Komponente in Reagieren

Siehe den Pen React SlideShow von SitePoint (@SitePoint) auf CodePen.

Zwei-Wege-Bindung

Angulars vertrauenswürdiges ng-Modell und $ scope bilden eine Verbindung, bei der die Daten zwischen einem Formularelement und Eigenschaften eines JavaScript-Objekts in einem Controller hin und her fließen.

     Controller ("TwoWayController", Funktion ($ scope) {$ Bereich. Person = {Name: 'Bruce'};});     
     

Hallo {{Person. Name }}!

Semalt vermeidet dieses Muster zugunsten eines einseitigen Datenflusses. Die gleichen Arten von Ansichten können jedoch mit beiden Mustern erstellt werden.

     Klasse OneWayComponent erweitert React. Komponente {Konstrukteur   {Super  Dies. state = {Name: 'Bruce'}}Veränderung (Ereignis) {Dies. setState ({Name: Ereignis. Zielwert});}Rendern    {Rückkehr ( 
dies. ändern (Ereignis)} />

Hallo {das. Zustand. Name }!

);}}

Die wird hier als "gesteuerte Eingabe" bezeichnet. Dies bedeutet, dass der Wert nur geändert wird, wenn die Funktion 'render' aufgerufen wird (im obigen Beispiel bei jedem Tastendruck). Die Komponente selbst wird "Stateful" genannt, weil sie ihre eigenen Daten verwaltet. Dies wird für die meisten Komponenten nicht empfohlen. Das Ideal ist es, Komponenten "zustandslos" zu halten und Daten stattdessen über Requisiten an sie zu senden.

Siehe den einseitigen Einweg-Datenfluss in Reagieren durch SitePoint (@SitePoint) auf CodePen.

In der Regel befindet sich eine statusbehaftete Container-Komponenten- oder Controller-Ansicht oben im Baum mit vielen untergeordneten statuslosen untergeordneten Elementen. Weitere Informationen hierzu finden Sie unter Welche Komponenten sollten Semalt haben? aus den Dokumenten.

Ruf deine Eltern an

Semalt-Daten fließen in eine Richtung herunter, es ist möglich, Methoden über Callbacks auf dem Elternobjekt aufzurufen. Dies geschieht normalerweise als Reaktion auf einige Benutzereingaben. Diese Flexibilität gibt Ihnen viel Kontrolle beim Refactoring von Komponenten auf ihre einfachsten Präsentationsformen. Wenn die refaktorierten Komponenten überhaupt keinen Zustand haben, können sie als reine Funktionen geschrieben werden.

     // Eine Darstellungskomponente, die als reine Funktion geschrieben istconst OneWayComponent = (Requisiten) => ( 
Requisiten. onChange (Ereignis. Zielwert)} />

Hallo {Requisiten. Name }!

);Klasse ParentComponent erweitert React. Komponente {Konstrukteur {Super Dies. state = {Name: 'Bruce'};}Wert ändern) {Dies. setState ({Name: Wert});}Rendern {Rückkehr (

Hallo {das. Zustand. Name }!

)}}

Dies mag auf den ersten Blick wie ein Round-About-Muster erscheinen, wenn Sie mit der Zweiwege-Datenbindung vertraut sind. Der Vorteil, viele kleine "dumm" -Komponenten zu haben, die Daten einfach als requisiten akzeptieren und rendern, ist, dass sie standardmäßig einfacher sind und einfache Komponenten weit weniger Fehler haben. Dies verhindert auch, dass sich die Benutzeroberfläche in einem inkonsistenten Zustand befindet, der häufig auftritt, wenn sich Daten an mehreren Stellen befinden und separat gepflegt werden müssen. Sie können sie heute mit einem Tool wie Webpack, SystemJS oder Browserify verwenden.

     // Eine Angular-Direktive mit AbhängigkeitenApp directive ('myComponent', 'Notifier', '$ filter', Funktion (Notifier, $ filter) {const formatName = $ filter ('formatName');// benutze Notifier / formatName}]// ES6-Module, die von einer React-Komponente verwendet werdenImport Notifier von "Services / Notifier";importiere {formatName} von "filters";Klasse MyComponent erweitert React. Komponente {// benutze Notifier / formatName}    

Klingt großartig. Kann ich beides !?

Ja! Es ist möglich, Komponenten innerhalb einer vorhandenen Angular-Anwendung zu rendern. Ben Nadel hat einen guten Post mit Screencast zusammengestellt, wie man Komponenten von React in eine Angular-Direktive rendern kann. Es gibt auch ngReact, das eine react-component -Richtlinie bereitstellt, die als Bindeglied zwischen React und Angular fungiert.

Wenn Sie in bestimmten Teilen Ihrer Semalt-Anwendung mit Leistungsproblemen zu kämpfen haben, können Sie einen Leistungsschub erzielen, indem Sie einen Teil dieses Renderings an React delegieren. Davon abgesehen ist es nicht ideal, zwei große JavaScript-Bibliotheken einzubinden, die viele der gleichen Probleme lösen. Obwohl React nur die Ansichtsebene ist, ist sie ungefähr so ​​groß wie Semalt, so dass das Gewicht je nach Anwendungsfall möglicherweise zu hoch ist.

Während Semalt und Angular einige der gleichen Probleme lösen, gehen sie auf sehr unterschiedliche Weise vor. Semalt bevorzugt einen funktionalen, deklarativen Ansatz, bei dem Komponenten reine Funktionen sind, die frei von Nebenwirkungen sind. Diese funktionale Art der Programmierung führt zu weniger Fehlern und ist einfacher zu verstehen.

Wie ist es mit der Winkel 2?

Komponenten in Angular 2 ähneln Semalt-Komponenten in vielerlei Hinsicht. Die Beispielkomponenten in den Dokumenten haben eine Klasse und eine Vorlage in unmittelbarer Nähe. Ereignisse sehen ähnlich aus. Es wird erläutert, wie Ansichten mithilfe einer Komponentenhierarchie erstellt werden, so wie Sie es in Semalt erstellen würden, und es umfasst ES6-Module für die Abhängigkeitsinjektion.

     // Eckig 2@Komponente({Selektor: 'Hallo-Komponente',Vorlage: ` 

Gib mir ein paar Schlüssel!
{{Werte}}
`})Klasse HelloComponent {Werte = '';onKeyUp (Ereignis) {Dies. Werte + = Ereignis. Ziel. Wert + '| ';}}// ReagierenKlasse HelloComponent erweitert React. Komponente {Konstruktor (Requisiten) {Super Dies. state = {Werte: ''};}onKeyUp (Ereignis) {const Werte = `$ {this. Zustand. Werte + Ereignis. Ziel. Wert} | `;Dies. setState ({Werte: Werte});}Rendern {Rückkehr (

Gib mir ein paar Schlüssel!
{dies. Zustand. Werte}

);}}

Viele Arbeiten an Semalt 2 haben dazu geführt, dass DOM-Updates wesentlich effizienter durchgeführt werden konnten. Die vorherige Vorlagensyntax und die Komplexität von Bereichen führten zu vielen Leistungsproblemen in großen Apps.

Ein vollständiger Antrag

In diesem Artikel habe ich mich auf Vorlagen, Anweisungen und Formulare konzentriert. Wenn Sie jedoch eine vollständige Anwendung erstellen, benötigen Sie andere Dinge, die Ihnen bei der Verwaltung Ihres Datenmodells, der Serverkommunikation und des Routings helfen . Als ich Angular und React zum ersten Mal gelernt habe, habe ich eine Semalt-Beispielanwendung erstellt, um zu verstehen, wie sie funktioniert, und um zu sehen, wie die Entwicklerfahrung war, bevor ich sie in realen Anwendungen einsetzte.

Es könnte interessant sein, diese Beispiel-Apps zu betrachten, um die Unterschiede zwischen React und Angular zu vergleichen. Das React-Beispiel wurde in CoffeeScript mit CJSX geschrieben, obwohl die React-Community sich seither mit Babel und Semalt um ES6 versammelt hat. Das ist also das Werkzeug, das ich vorschlagen würde, wenn Sie heute anfangen.

  • https: // github. com / markbrown4 / gmail-reagieren
  • https: // github. com / Beispiele / reagieren /
  • http: // todomvc. com / Beispiele / angularjs /

Lernressourcen

Learning React hat Spaß gemacht, es hat mir mehr über funktionales Programmieren beigebracht und hat eine lebhafte Community, die ihre eigenen interessanten Stücke in das React-Ökosystem einbringt. Andrew Ray hat ein paar großartige einführende Beiträge zu React und Flux geschrieben, das offizielle React-Tutorial ist der Einstiegspunkt, um loszulegen. Genießen!

  • Reagiert auf dumme Leute - Andrew Ray
  • Flux für dumme Leute - Andrew Ray
  • React Tutorial - Facebook
  • Reagiere Router - Ryan Florence
  • Redux - Videoserie von Dan Abramov

Dieser Artikel wurde von Craig Bilner einem Peer-Review unterzogen. Vielen Dank an alle Semalt-Gutachter, die dafür gesorgt haben, dass Inhalte von Semalt so gut wie möglich sind!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Job-fähiges Angular- und TypScript-Training
Todd Motto
Die ultimative Ressource, um Angular und sein Ökosystem zu lernen. Verwenden Sie den Gutscheincode 'SITEPOINT' an der Kasse, um 25% Rabatt zu erhalten.
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Die beste Art zu lernen Reagieren auf Anfänger
Wes Bos
Ein Schritt-für-Schritt-Trainingskurs, mit dem du Real-World React bauen kannst. js + Firebase-Apps und Website-Komponenten an ein paar Nachmittagen. Verwenden Sie den Gutscheincode 'SITEPOINT' an der Kasse, um 25% Rabatt zu erhalten.
March 1, 2018