There are a few ways you could build a working site from undo76’s example. Unfortunately all the noise around modern JS does make it seem more complicated than it really is, but you can set up everything you need in about two minutes.<p>The only essentials you need are React itself and, because the example uses ES2015 and JSX code, Babel to transpile the script into more portable JS that will run in today’s browsers.<p>In practice you’d probably also be using Node&#x2F;NPM to manage packages and a tool like Browserify or Webpack to resolve dependencies. I’ll use Browserify.<p>So, here is a complete working example. For the script, we’ll use undo76’s original code verbatim, and add imports of the React modules at the start of the file. Let’s call this index.src.js:<p><pre><code>    import React from &quot;react&quot;;
    import ReactDOM from &quot;react-dom&quot;;

    const DATA = {    
        name: &#x27;John Smith&#x27;,
        imgURL: &#x27;http:&#x2F;&#x2F;lorempixel.com&#x2F;100&#x2F;100&#x2F;&#x27;,
        hobbyList: [&#x27;coding&#x27;, &#x27;writing&#x27;, &#x27;skiing&#x27;]
      }

      const App = ({ profileData }) =&gt; (
        &lt;div&gt;
          &lt;Profile { ...profileData } &#x2F;&gt;
          &lt;Hobbies { ...profileData } &#x2F;&gt;
        &lt;&#x2F;div&gt;
      );

      const Profile = ({ name, imgURL }) =&gt; (
        &lt;div&gt;              
          &lt;h3&gt;{name}&lt;&#x2F;h3&gt;
          &lt;img src={imgURL} &#x2F;&gt;
        &lt;&#x2F;div&gt;
      );    

      const Hobbies = ({ hobbyList }) =&gt; (
        &lt;div&gt;
          &lt;h5&gt;My hobbies:&lt;&#x2F;h5&gt;
          &lt;ul&gt;
            { hobbyList.map( (hobby, idx) =&gt; (
              &lt;li key={ idx }&gt;{ hobby }&lt;&#x2F;li&gt;
            ))}
          &lt;&#x2F;ul&gt;
        &lt;&#x2F;div&gt;
      );

      ReactDOM.render(&lt;App profileData={DATA} &#x2F;&gt;, document.getElementById(&#x27;content&#x27;));
</code></pre>
As usual, we need an HTML file to load that script, though it doesn’t need to do much else except provide a &lt;div&gt; with an ID where we’ll put the content that React renders. Otherwise just use your preferred boilerplate. Let’s call this index.html:<p><pre><code>    &lt;!DOCTYPE html&gt;
    &lt;html lang=&quot;en&quot;&gt;
    &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;React test&lt;&#x2F;title&gt;
    &lt;&#x2F;head&gt;
    &lt;body&gt;
    &lt;div id=&quot;content&quot;&gt;&lt;&#x2F;div&gt;
    &lt;script src=&quot;index.js&quot; charset=&quot;utf-8&quot;&gt;&lt;&#x2F;script&gt;
    &lt;&#x2F;body&gt;
    &lt;&#x2F;html&gt;
</code></pre>
Finally, we need the tools and React packages:<p><pre><code>    npm init
    npm install --save react react-dom
    npm install --save-dev browserify babelify babel-preset-es2015 babel-preset-react
</code></pre>
Now we can run Browserify to generate our output JS file (adjust the &#x2F; to \ if you’re running on Windows):<p><pre><code>    node_modules&#x2F;.bin&#x2F;browserify index.src.js -o index.js -t [ babelify --presets [ es2015 react ] ]
</code></pre>
That will produce index.js, which is just the code from undo76 linked with React and then transpiled to a more portable level of JS that today’s browsers can cope with. (Incidentally, this is literally the first example on the Babelify documentation page, which gives you an idea of how routine it is once you’re familiar with these tools.)<p>Now load index.html in your browser of choice and enjoy. :-)