React + Rails

Una interesante combinación

Jairo Fernández

Desarrollador frontend en Youse

rails new react-app --webpack=react
rails webpacker:install

+ 108MB...

Aunque solo se usan para desarrollo, en producción es considerablemente bajo

rails generate react:install

Text

Text

+ 5 MB

gem 'webpacker'
gem 'react-rails'
bundle install
rails webpacker:install       
rails webpacker:install:react
rails generate react:install
# app/views/layouts/application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>MyApp2</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

Habilitamos los componentes en el layout principal

rails g react:component HelloWorld greeting:string

Creando nuestro primer componente

rails g react:component HelloWorld greeting:string
# app/javascript/components/HelloWorld.js

import React from "react"
import PropTypes from "prop-types"
class HelloWorld extends React.Component {
  render () {
    return (
      <React.Fragment>
        Greeting {this.props.greeting}
      </React.Fragment>
    );
  }
}

HelloWorld.propTypes = {
  greeting: PropTypes.string
};
export default HelloWorld

¿Cómo lo usamos?

rails g controller hello index
# app/controllers/hello_controller.rb

class HelloController < ApplicationController
  def index
  end
end
# config/routes.rb

Rails.application.routes.draw do
  get 'hello/index'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
# app/views/hello/index.html.erb

<h1>Hello#index</h1>
<p>Find me in app/views/hello/index.html.erb</p>
# app/controllers/pages_controller.rb

class PagesController < ApplicationController
  def index
    @greet_from_controller = 'Hello from controller'
  end
end
# app/views/hello/index.html.erb

<%= react_component("HelloWorld", { greeting: @greet_from_controller }) %>
rails s

Que cosas fueron añadidas...

Que cosas fueron añadidas...

# app/javascript/packs/application.js

/* eslint no-console:0 */

console.log('Hello World from Webpacker')
// Support component names relative to this directory:
var componentRequireContext = require.context("components", true);
var ReactRailsUJS = require("react_ujs");
ReactRailsUJS.useContext(componentRequireContext);

La magia!

Live reload

bundle exec ./bin/webpack-dev-server

Hasta este momento

 

1. Estamos usando la configuración básica de React en nuestro proyecto

 

2. Ya podemos usar Reactjs en nuestros views.

rails g react:component Post title:string published:bool published_by:instanceOf{Person}

Recursos

React + Rails! Simple

By Jairo Fernández

React + Rails! Simple

  • 556