Ich möchte ReactJS als Ansicht meiner Rails-Anwendung mit dem Edelstein react-rails implementieren.
Bisher habe ich nur den Standard .erb
verwendet, um meine Ansichten in meiner RoR-Anwendung zu rendern, und ich frage mich, wie man das mit React macht.
Wenn Sie beispielsweise ein Formular für ein Modell in RoR erstellen möchten, erstellen Sie "nur" ein Formular mit:
%Vor% Und das automatisch die richtige Route verwenden, generieren Sie das CSRF-Token, verwenden Sie die richtige CSS id
& amp; class
, etc ...
Wenn ich jetzt React benutze, muss ich mich um all das kümmern? Und erstelle Form in JSX im Render, auf altmodische Weise?
%Vor%Es gibt kein "automatisch generierendes Feature" wie Ruby for React?
Ich habe einige Ressourcen online über Tutorial für React & amp; Schienen ( 1 , 2 , 3 ), aber die meiste Zeit sagen sie verschiedene Dinge. Einige verwenden JSX, etwas Kaffee, während die offizielle React-Website die Verwendung von JSX empfiehlt . Einige benutzen refs
, andere states
und es ist so mit allem!
Gibt es ein großartiges Tutorial, das als Referenz für die Erstellung der Grundlage meiner Anwendung mit React verwendet werden kann?
Die kurze Antwort lautet, dass Sie React-Komponenten in JSX schreiben, die von den in den herkömmlichen Ansichten geschriebenen DOM-Elementen getrennt sind. React benötigt die vollständige Kontrolle über die DOM-Elemente, die es gut verarbeitet, oder Sie werden es die ganze Zeit bekämpfen (obwohl begrenzte Verwendung erfolgreich sein kann, kann es fragil sein).
Auf die Gefahr hin, dass ich nicht wirklich antworte, was Sie zu lernen beabsichtigen, hier sind ein paar Gedanken, die helfen könnten:
Sie haben wahrscheinlich drei Hauptansätze:
Es gibt zweifellos viele Variationen zu diesen Themen, aber diese sind wahrscheinlich die wichtigsten.
Ich habe nur an einigen Apps gearbeitet, die das tun, also nimm meine Kommentare mit einem Körnchen Salz. Für neue Apps tendiere ich jedoch zu einem separaten Service-Layer-Ansatz, da die Tooling-Software so viel einfacher ist. Ich neige dazu, ReactJS nur in einer bestehenden App zu verwenden, wenn ich einen besonders JS-schweren Teil einer Ansicht habe und diese Funktionalität gut begrenzt ist.
Minimal ReactJS
In klassischen Rails-Ansichten neigen wir dazu, JS nur zu verwenden, um die Ansicht mit clientseitigem Verhalten zu erweitern: Die meisten View-Berechnungen werden serverseitig durchgeführt, und dann lässt JS einfach verschiedene Aspekte des DOM für bestimmte Zwecke manipulieren. Dies kann mit React schwierig sein, da React die Verantwortung für seine Elemente des DOM übernimmt, um den Status aktualisiert zu halten. Aber Sie können ReactJS immer noch für Elemente Ihrer Seite verwenden, als ob Sie eine Teilansicht in Rails rendern würden, solange diese "teilweise" gut begrenzt ist.
Verwenden Sie das React-Rails-Juwel, lassen Sie Ihre Ansicht einfach eine React-Komponente so darstellen, als ob Sie eine partielle Komponente verwenden würden, und lassen Sie diese Komponente dann direkt mit den entsprechenden Elementen umgehen, indem Sie AJAX-Aufrufe verwenden, wenn Sie während des Clients mehr vom Server benötigen benutzen. Dies führt zu einer begrenzten, fokussierten Trennung von Bedenken und Sie können die herkömmlichen JS-Techniken verwenden, um andere DOM-Informationen der Seite zu erfassen, die Ihre Komponente umgeben (obwohl dies schwierig und chaotisch werden kann, wenn Sie mehr tun als nur sehr begrenzte Formen davon). - sollte wahrscheinlich überdenken, wenn Sie viel davon tun.)
Der Hauptvorteil dieses Ansatzes besteht darin, dass Sie damit beginnen können, ReactJS in eine bestehende Anwendung einzuführen und die Funktionalität zu migrieren, wenn Sie es für nützlich halten. Für bestimmte clientseitige intensive Dinge, wie zum Beispiel einige Formularfelder mit starker clientseitiger Interaktion, die aber gut begrenzt sind, kann diese Technik ein guter Kandidat sein.
ReactJS-Ansichten von Rails
Bei diesem Ansatz könnten wir Rails verwenden, um die Ansichtslayouts (d. h. den HTML-Wrapper, aber keinen Inhalt) zu rendern und dann die spezifischen Ansichten entweder ReactJS-only oder konventionellere ERB / Haml / Slim-Ansichten zu lassen. Bei diesem Ansatz würde die Rails-Ansicht lediglich eine React-Hauptkomponente für die Seite erstellen und dann den Rest in ReactJS ausführen, um diesen Teil (normalerweise den gesamten Inhaltsbereich) in seiner eigenen JSX zu verwalten. Auf diese Weise wird Ihr JSX immer noch aus Ihrer Asset-Pipeline bedient, aber Sie haben wirklich die Kernpräsentation der Seite von React behandelt und Rails nur für die minimalen Zwecke von Layouts verwendet und einigen Sichten erlaubt, mit ReactJS zu arbeiten andere als Rails-basiert.
Wie ich es beschrieben habe, gehe ich eher von einer mehrseitigen App aus. Wenn Sie eine einzelne Seite App schreiben, würde diese Technik Rails wahrscheinlich einfach auf eine triviale Weise für die Präsentation verwenden.
Dennoch gibt es einige Vorteile:
Separate Service-Layer
Bei diesem Ansatz werden Ansichten vom Back-End-Dienst vollständig getrennt. Schreiben Sie Ihre Rails-Anwendung als einen API-Server, der JSON vollständig rendert. Die gesamte Kernlogik wird immer noch in Controllern und Modellen behandelt, so dass ein Teil des Designs weitgehend intakt ist. In der Tat brauchen Sie dafür keine klassischen Rails. Andere Frameworks wie Grape oder der Rails-Api-Edelstein sind möglicherweise besser geeignet, da sie leichter sind, da Sie keine Ansichten anzeigen oder diese Helfer benötigen.
Dann schreiben Sie eine separate ReactJS-basierte App (denken Sie daran, dass ReactJS auch serverseitig sein kann), die sich nur auf die Präsentation konzentriert und nur Ihren RoR-API-Service verwendet, um Informationen abzurufen und zu posten.
Überlegungen zu diesem Ansatz:
Viel Glück!
UPDATE (9/2/2015) Sie können diesen blog-Beitrag erhellend finden: Ссылка durch Blaine Hatab (3/2015). Der Beitrag skizziert drei Ansätze, die der oben skizzierten Gliederung auf hoher Ebene ähneln, aber für ein vollständigeres Bild des weiteren Vorgehens gedacht sind. Die drei Ansätze, die sie auflisten, sind
Sie finden diese Beschreibung möglicherweise nützlicher und bietet Referenzen an, um weitere Details zu sehen.
Tags und Links javascript ruby-on-rails reactjs react-rails