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_componentdans 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