Rails + Mobx + React + React Router =

Setup

Rails

New App

rails new Demo --database=postgresql --webpack

------ add to gemfile ---
#gem 'webpacker'
gem 'react-rails'


then 
bundle install

Setup Webpacker (1)

rails webpacker:install
rails webpacker:install:react  
rails generate react:install

#add line to header of application.html.erb

<%= javascript_pack_tag 'application' %>
rails g react:component HelloWorld

Setup Webpacker (2)

npm install --save-dev @babel/plugin-proposal-class-properties
npm install --save-dev @babel/plugin-proposal-decorators   

#babel.config.js
add : 
 [
        require("@babel/plugin-proposal-decorators").default,
        {
          legacy: true
        }
      ],
      [
        require("@babel/plugin-proposal-class-properties").default,
        {
          loose: true
        }
      ],

Setup Webpacker (5)

on config/webpacker.yml
add in the extensions list if not present:
- .jsx 

WOUHOU: READY

MOBX

MOBX

MOBX

React router

React router

yarn add react-router-dom

Pour une fois que c'est simple ;-) Enjoy !

React router

import React from "react";
import Index from "./index"
import About from "./About"
import Users from "./Users";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
//import { HashRouter as Router, Route, Link } from "react-router-dom";

function AppRouter() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/about/">About</Link>
            </li>
            <li>
              <Link to="/users/">Users</Link>
            </li>
          </ul>
        </nav>

        <Route path="/" exact component={Index} />
        <Route path="/about/" component={About} />
        <Route path="/users/" component={Users} />
      </div>
    </Router>
  );
}

export default AppRouter;

Tips and Tricks

Tips and Tricks

<Comp Key={number}  />

=> force reload component :-)

Tips and Tricks

static components

//               destructuration des composants
const MyStaticComp = ({id,nom,prenom}) => {

   return (
        <div>
               <p>{id}</p>
               <p>{prenom}</p>
               <p>{nom}</p>
          </div>
     )
}

Tips and Tricks

MOment JS

Tips and Tricks

Get attributes

<a onClick={this.handleClick} data-firstname="john" data-lastname="doe">balbalbab</a>
handleClick(e){
    let firstname = e.target.dataset.firstname;
    let lastname = e.target.dataset.lastname;

}
Made with Slides.com