Ruby on Rails
Intégration de React.js avec Rails à l'aide d'Hyperloop
Recherche…
Introduction
Cette rubrique couvre l’intégration de React.js aux Rails à l’aide du joyau Hyperloop
D'autres approches non couvertes ici utilisent les gemmes react-rails ou react_on_rails.
Remarques
Les classes de composants génèrent simplement les classes de composants javascript équivalents.
Vous pouvez également accéder aux composants et aux bibliothèques javascript directement à partir de vos classes de composants Ruby.
Hyperloop va "prérégler" le côté serveur de vue pour que votre vue initiale se charge exactement comme les modèles ERB ou HAML. Une fois chargée sur le client, la réaction prend le relais et mettra à jour progressivement le DOM en tant que changement d’état dû aux entrées de l’utilisateur, aux requêtes HTTP ou aux données de socket Web entrantes.
Outre les composants, Hyperloop a des magasins pour gérer l'état partagé, les opérations pour encapsuler la logique métier isomorphe et les modèles qui donnent un accès direct à vos modèles ActiveRecord sur le client en utilisant la syntaxe AR standard.
Plus d'infos ici: http://ruby-hyperloop.io/
Ajouter un simple composant de réaction (écrit en ruby) à votre application Rails
- Ajoutez le joyau hyperloop à vos rails (4.0 - 5.1) Gemfile
-
bundle install
- Ajoutez le manifeste hyperloop au fichier application.js:
// app/assets/javascripts/application.js ... //= hyperloop-loader
- Créez vos composants de réaction et placez-les dans le
hyperloop/components
# app/hyperloop/components/hello_world.rb class HelloWorld < Hyperloop::Component after_mount do every(1.second) { mutate.current_time(Time.now) } end render do "Hello World! The time is now: #{state.current_time}" end end
- Les composants agissent comme des vues. Ils sont "montés" en utilisant la méthode
render_component
dans un contrôleur:# somewhere in a controller: ... def hello_world render_component # renders HelloWorld based on method name end
Déclaration des paramètres du composant (accessoires)
class Hello < Hyperloop::Component # params (= react props) are declared using the param macro param :guest render do "Hello there #{params.guest}" end end # to "mount" Hello with guest = "Matz" say Hello(guest: 'Matz') # params can be given a default value: param guest: 'friend' # or param :guest, default: 'friend'
Balises HTML
# HTML tags are built in and are UPCASE class HTMLExample < Hyperloop::Component render do DIV do SPAN { "Hello There" } SPAN { "Welcome to the Machine!" } end end end
Gestionnaires d'événements
# Event handlers are attached using the 'on' method class ClickMe < Hyperloop::Component render do DIV do SPAN { "Hello There" } A { "Click Me" }.on(:click) { alert('you did it!' } end end end
États
# States are read using the 'state' method, and updated using 'mutate' # when states change they cause re-render of all dependent dom elements class StateExample < Hyperloop::Component state count: 0 # by default states are initialized to nil render do DIV do SPAN { "Hello There" } A { "Click Me" }.on(:click) { mutate.count(state.count + 1) } DIV do "You have clicked me #{state.count} #{'time'.pluralize(state.count)}" end unless state.count == 0 end end end
Notez que les états peuvent être partagés entre les composants en utilisant Hyperloop :: Stores
Rappels
# all react callbacks are supported using active-record-like syntax class SomeCallBacks < Hyperloop::Component before_mount do # initialize stuff - replaces normal class initialize method end after_mount do # any access to actual generated dom node, or window behaviors goes here end before_unmount do # any cleanups (i.e. cancel intervals etc) end # you can also specify a method the usual way: before_mount :do_some_more_initialization end