DEV Community

Cover image for Learn React JS in 5 minutes — A tutorial for beginners
Per for Scrimba

Posted on • Updated on • Originally published at medium.freecodecamp.org

Learn React JS in 5 minutes — A tutorial for beginners

This tutorial will give you a basic understanding of React by building a very simple application. I’ll leave out everything which I don’t think is core.

And then if it sparks your interest, and you want to learn more, you can check out our free React course on Scrimba.

But as for now, let's focus on the basics!

The setup

When getting started with React, you should use the simplest setup possible: an HTML file which imports the React and the ReactDOM libraries using script tags.

It looks like this:

<html>
<head>  
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>  
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>  
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>  
</head>  
<body>  
    <div id="root"></div>  
    <script type="text/babel">  

    /*   
    ADD REACT CODE HERE 
    */  

    </script>  
</body>  
</html>

We’ve also imported Babel, as React uses something called JSX to write markup. We’ll need to transform the JSX into plain JavaScript, so that the browser can understand it.

There are more two things I want you to notice:

  1. The <div> with the id of #root. This is the entry point for our app. This is where our entire app will live.
  2. The <script type="text/babel"> tag in the body. This is where we’ll write our React code.

If you want to experiment with the code, check out this Scrimba playground.

Components

Everything in React is a component, and these usually take the form of JavaScript classes. You create a component by extending upon the React-Component class. Let’s create a component called Hello:

class Hello extends React.Component {  
    render() {  
        return <h1>Hello world!</h1>;  
    }  
}

You then define the methods for the component. In our example, we only have one method, and it’s called render().

Inside render() you’ll return a description of what you want React to draw on the page. In the case above, we simply want it to display an h1 tag with the text Hello world! inside it.

To get our tiny application to render on the screen, we also have to use ReactDOM.render():

ReactDOM.render(  
    <Hello />,   
    document.getElementById("root")  
);

So this is where we connect our Hello component with the entry point for the app (<div id="root"></div>).

So we’re simply saying: Hey React! Please render the Hello component inside the DOM node with an id of root!

It results in the following:

The HTML’ish syntax we just looked at (<h1> and <Hello/>) is the JSX code I mentioned earlier. It’s not actually HTML, it’s a lot more powerful. Though what you write there does end up as HTML tags in the DOM.

The next step is to get our app to handle data.

Handling data

There are two types of data in React: props and state. The difference between the two is a bit tricky to understand in the beginning, so don’t worry if you find it a bit confusing. It’ll become easier once you start working with them.

The key difference is that the state is private and can be changed from within the component itself. Props are external, and not controlled by the component itself. It’s passed down from components higher up the hierarchy, who also control the data.

A component can change its internal state directly. It can not change its props directly.

Let’s take a closer look at props first.

Props

Our Hello component is completely static. It renders out the same message no matter what. However, a big part of React is reusability, meaning the ability to write a component once, and then reuse it in different use cases. For example to display different messages.

To achieve this type of reusability, we’ll add props. This is how you pass props to a component:

ReactDOM.render(  
    <Hello message="my friend" />,   
    document.getElementById("root")  
);

This prop is called message and has the value “my friend”. We can access this prop inside the Hello component by referencing this.props.message, like this:

class Hello extends React.Component {  
    render() {  
        return <h1>Hello {this.props.message}!</h1>;  
    }  
}

As a result, this is rendered on the screen:

The reason we’re writing {this.props.message} with curly braces is because we need to tell the JSX that we want to add a JavaScript expression. This is called escaping.

So now we have a reusable component which can render whatever message we want on the page. Woohoo!

However, what if we want the component to be able to change its own data? Then we have to use state instead!

State

The other way of storing data in React is in the component’s state. And unlike props — which can’t be changed directly by the component — the state can.

So if you want the data in your app to change — for example, based on user interactions — it must be stored in a component’s state somewhere in the app.

Initializing state

To initialize the state, simply set this.state in the constructor() method of the class. Our state is an object which in our case only has one key called message.

class Hello extends React.Component {  

    constructor(){  
        super();  
        this.state = {  
            message: "my friend (from state)!"  
        };  
    }  

    render() {  
        return <h1>Hello {this.state.message}!</h1>;  
    }  
}

Before we set the state, we have to call super() in the constructor. This is because this is uninitialized before super() has been called.

Changing the state

To modify the state, simply call this.setState(), passing in the new state object as the argument. We’ll do this inside a method which we’ll call updateMessage.

class Hello extends React.Component {  

    constructor(){  
        super();  
        this.state = {  
            message: "my friend (from state)!"  
        };  
        this.updateMessage = this.updateMessage.bind(this);   
   }

   updateMessage() {  
        this.setState({  
            message: "my friend (from changed state)!"  
        });  
    }

    render() {  
        return <h1>Hello {this.state.message}!</h1>;  
    }  
}

Note: To make this work, we also had to bind the this keyword to the updateMessage method. Otherwise we couldn’t have accessed this in the method.

Event Handlers

The next step is to create a button to click on, so that we can trigger the updateMessage() method.

So let’s add a button to the render() method:

render() {  
  return (  
     <div>  
       <h1>Hello {this.state.message}!</h1>  
       <button onClick={this.updateMessage}\>Click me!</button>  
     </div>     
  )  
}

Here, we’re hooking an event listener onto the button, listening for the onClick event. When this is triggered, we call the updateMessage method.

Here’s the entire component:

class Hello extends React.Component {  

    constructor(){  
        super();  
        this.state = {  
            message: "my friend (from state)!"  
        };  
        this.updateMessage = this.updateMessage.bind(this);  
    }

    updateMessage() {  
        this.setState({  
            message: "my friend (from changed state)!"  
        });  
    }

    render() {  
         return (  
           <div>  
             <h1>Hello {this.state.message}!</h1>  
             <button onClick={this.updateMessage}/>Click me!</button>  
           </div>     
        )  
    }  
}

The updateMessage method then calls this.setState() which changes the this.state.message value. And when we click the button, here’s how that will play out:

Congrats! You now have a very basic understanding of the most important concepts in React.

If you want to learn more, be sure to check out our free React course on Scrimba.

Good luck with the coding :)

Thanks for reading! My name is Per, I’m the co-founder of Scrimba, and I love helping people learn new skills. Follow me on Twitter and Instagram if you’d like to stay in touch.

Top comments (12)

Collapse
 
karataev profile image
Eugene Karataev

Nice introduction to React.

The reason we’re writing {this.props.message} with curly braces is because we need to tell the JSX that we want to add a JavaScript expression. This is called escaping.

I don't get why this process is called escaping. I think the better name is interpolation.
Escaping for me is more like adding a slash before a quote symbol in a javascript string. Replacing special symbols in URL is also sounds like escaping.

Collapse
 
laurieontech profile image
Laurie

Nice write up. Once you understand the creation of a single component the possibilities are endless. If you're looking to interact with more than one/between them I might recommend something I wrote.

Collapse
 
vanaf1979 profile image
Stephan Nijman

I took the scrimba course a couple of weeks ago. I realy recommend it to anyone wanting to learn react. :)

Collapse
 
alexantra profile image
Alex Antra

Ooh this actually looks doable by a noob like me. Might give it a whirl!

Collapse
 
jsardev profile image
Jakub Sarnowski

I don't like this kind of clickbait titles like "Learn React in 5 minutes", "Master Angular in 1 day". You know it's not possible - why use such a title then? I wonder why articles like this still gain the most traction - do people still don't understand that you can't learn anything more complex than adding two integers to each other in such a small period of time? :P

No hate tho, the article is totally cool, just wanted to share my thought about this kind of practices :)

Collapse
 
dance2die profile image
Sung M. Kim

Refreshing to see a React tutorial using a CDN for React instead of using webpack/create-react-app/<>.

It definitely removes the barrier to get started with React 😃

Collapse
 
josegonz321 profile image
Jose Gonzalez

Many people still believe you need create-react-app to get started

Collapse
 
dance2die profile image
Sung M. Kim

I couldn't agree more.

I see many Vue "getting started" posts using a single "script" tag to get started while the majority of React counterparts starts with "CRA" (which requires understanding of NPM & Node).

Collapse
 
rick02840 profile image
Rick Hood

Are sites for production done this way (via CDN)? In other words, is there anything "wrong" with doing it this way?

Collapse
 
donvitocodes profile image
donvitocodes

Thanks for sharing the free react course!

Collapse
 
azhtom profile image
Daniel Soria

Cool!

Thank you.

Collapse
 
kenold profile image
Kenold Beauplan

Thanks for sharing Pee. I'm half way through your React article on Scrimba. Great work!