Building web applications with React and Rails

Introduction

Ruby on Rails and React are two powerful tools that can be used to build a modern web application. Ruby on Rails is a web application framework written in the Ruby programming language, while React is a JavaScript library for building user interfaces. In this article, we will discuss how to build a web application using Ruby on Rails and React.

Getting Started

Before we start building our web application, we need to have some knowledge about Ruby on Rails and React. Ruby on Rails is a Model-View-Controller (MVC) framework that follows the Convention over Configuration (CoC) principle. It provides a set of tools and conventions to make it easier for developers to build web applications. React, on the other hand, is a library that helps to build user interfaces using a declarative approach.

To get started with building our web application, we need to set up our development environment. We will need to have Ruby, Rails, and Node.js installed on our computer. We can use the following commands to check if we have Ruby and Rails installed:

Copy coderuby -v
rails -v

If we don't have Ruby and Rails installed, we can follow the instructions on the official Ruby on Rails website to install them.

We can also use the following command to check if we have Node.js installed:

Copy codenode -v

If we don't have Node.js installed, we can download it from the official Node.js website.

Creating a new Rails application

To create a new Rails application, we can use the following command:

sqlCopy coderails new myapp --webpack=react

This will create a new Rails application with React pre-installed. The --webpack=react option tells Rails to use Webpack to manage the assets and to use React.

Once the application is created, we can navigate to the application directory and start the Rails server using the following command:

bashCopy codecd myapp
rails server

This will start the Rails server on port 3000.

Creating a React component

To create a React component, we can use the react-rails gem. We can install the gem by adding it to our Gemfile and running the following command:

Copy codebundle install
rails webpacker:install:react

Once the gem is installed, we can generate a new React component using the following command:

cCopy coderails generate react:component HelloWorld greeting:string

This will create a new React component called HelloWorld with a prop called greeting.

We can now use this component in our Rails views by using the react_component helper method. For example, we can create a new view called hello_world.html.erb and add the following code:

erbCopy code<h1>Hello World</h1>
<%= react_component("HelloWorld", { greeting: "Hello, World!" }) %>

This will render the HelloWorld component with the prop greeting set to "Hello, World!".

Building a REST API

To build a REST API in Rails, we can use the rails generate scaffold command. For example, we can generate a new scaffold for a Todo resource using the following command:

phpCopy coderails generate scaffold Todo title:string completed:boolean

This will generate a new scaffold with the title and completed attributes. We can now run the migration to create the database table and start the Rails server:

Copy coderails db:migrate
rails server

We can now access the Todos resource by navigating to http://localhost:3000/todos.

Consuming the API with React

To consume the API with React, we can use the axios library. We can install the library using the following command:

Copy codenpm install axios

Once the library is installed, we can create a new React component called TodoList that will fetch the Todos from the API and display them in a list. We can create a new file called TodoList.js in the app/javascript/components directory with the following code:

jsxCopy codeimport React, { useState, useEffect } from "react";
import axios from "axios";

const TodoList = () => {
  const [todos, setTodos] = useState([]);

  useEffect(() => {
    axios.get("/todos.json")
      .then(response => {
        setTodos(response.data);
      })
      .catch(error => {
        console.log(error);
      });
  }, []);

  return (
    <div>
      <h1>Todos</h1>
      <ul>
        {todos.map(todo => (
          <li key={todo.id}>{todo.title} ({todo.completed ? "completed" : "not completed"})</li>
        ))}
      </ul>
    </div>
  );
};

export default TodoList;

This component will fetch the Todos from the API using the axios library and store them in the todos state using the useState hook. It will then display the Todos in a list using the map function.

We can now use this component in our Rails views by using the react_component helper method. For example, we can create a new view called todos.html.erb and add the following code:

erbCopy code<h1>Todos</h1>
<%= react_component("TodoList") %>

This will render the TodoList component and display the Todos in a list.

Conclusion

In this article, we have discussed how to build a web application using Ruby on Rails and React. We have covered the basics of Ruby on Rails and React, and how to create a new Rails application with React pre-installed, how to create a new React component using the react-rails gem, how to build a REST API in Rails using the rails generate scaffold command, and how to consume the API with React using the axios library. By following these steps, you should now have a basic understanding of how to build a web application using Ruby on Rails and React.