Reactで「Hello World」をしよう

JSXとBabelについて

ブラウザのデベロッパーツールで、何らかの文字を表示させたいと思います。

まずは、このコードを書いて下さい。(public/scripts/app.js)

console.log('app');
let template=<p>This is JSX from app</p>;
let appRoot = document.getElementById('app');
ReactDOM.render(template, appRoot);

直感的なコードではありますが、これをブラウザで見ると、エラーが出ています。なぜならば、これはJSXというJavaScriptの拡張コードで書いているのですが、Chromeはその記法を理解してくれないためです。ブラウザが理解できるようにJSXを普通のJavaScriptのコードに変換してやる必要があります。

JSXからJavaScriptへのコードの変換にはBabelを使います。

Try it outをクリックして下さい。

さきほどのコードを貼ると、JSXがJavaScriptに変換されることがわかります。

変換前

<p>This is JSX from app</p>;

変換後

"use strict";
React.createElement(
 "p",
 null,
 "This is JSX from app"
);

変換後のコードをapp.jsに書けば、動くことがわかるはずです。それを常に書いてもいいのですが、それはReact.jsが意図していることではありません。簡単にJavaScript書くためにローカルにBabelをインストールしましょう。

Babelのインストール

sudo npm install -g babel-cli@6.24.1

インストールされていることを確認します。

babel --version

次にpackage.jsonを作成します

yarn init

ファイルの中身は、このようになっています。

cat package.json
{
"name": "indecision-app",
"version": "1.0.0",
"main": "index.js",
"license": "MIT"
}

次に、babelのモジュールをインストールします。

yarn add babel-preset-react@6.24.1

yarn add babel-preset-env@1.5.2

node_moduleの中身を見ると、様々なファイルがインストールされていることがわかります。

cd /home/vagrant/indecision-app
mkdir src
touch src/app.js

このファイルを編集して、以下の内容を書いて下さい(src/app.js)

console.log('app');
let template=<p>This is JSX from app</p>;
let appRoot = document.getElementById('app');
ReactDOM.render(template, appRoot);

public/scripts/app.jsは何も書かれていない状態にして下さい。

src/app.jsのみにコードが書かれています。

これが現在のディレクトリ(フォルダ)構成です。

JSXファイルから、JavaScriptコードを自動で生成しましょう。

babel src/app.js --out-file=public/scripts/app.js --presets=env,react

確認してみましょう。

cat public/scripts/app.js 

このコードは自分で書いたものではなく、自動生成されたものです。

'use strict';
console.log('app');
var template = React.createElement(
'p',
null,
'This is JSX from app'
);
var appRoot = document.getElementById('app');
ReactDOM.render(template, appRoot);

src/app.jsにあるJSXから、public/scripts/app.jsにJavaScriptのコードが自動で書かれてました。

次に一旦、ctrl + cを押して、watchオプションをつけて起動させましょう。

babel src/app.js --out-file=public/scripts/app.js --presets=env,react --watch

この状態で、src/app.jsを変更してみて下さい。自動で、ブラウザの方も変更されることがわかるはずです。


この記事が気に入ったらサポートをしてみませんか?