ReactはFacebookがオープンソースで開発しているJavaScripライブラリです。ドキュメントサイトのGetting StartedとTutorialから勉強をはじめます。きっかけはClojureを勉強していて、OmというReactのClojureScriptインタフェースを紹介したInfoQの記事で興味を持ちました。Web UIのデータバインディングをリアクティブに書く方法を取り入れたいです。
Reactの特徴
Reactのページに書いてある特徴を簡単にまとめます。
JUST THE UI
MVCのVだけComponentとして提供するVIRTUAL DOM
VirtualDOMを使い差分だけ更新するため高速に動作するDATA FLOW
一方向のリアクティブなデータバインディングJSX
JavaScript内にXML風に記述でき、DOM構造がわかりやすい
開発用コンテナ
JavaScriptの開発環境はStrongLoopを追加したmasato/baseimageイメージを使います。insecure_key
はphusion/baseimage-dockerからダウンロードして使います。
$ wget -P ~/.ssh https://raw.githubusercontent.com/phusion/baseimage-docker/master/image/insecure_key |
Node.jsの準備
SSHで接続後、nvmを有効にしてnodeとnpmコマンドが使えるようにします。
$ source ~/.profile |
Emacsの設定
JSX用のEmacsの設定を、Emacs - Setup JSX mode, JSX Syntax checking and Suggestionを参考にして、web-modeとflycheckをCaskファイルに追加します。
;; web-mode |
npmコマンドでjsxhintパッケージをインストールします。
$ npm install -g jsxhint |
caskコマンドでパッケージをインストールします。
$ cd ~/.emacs.d |
JSX用のweb-modeとflucheckの設定を追加します。
(add-to-list 'auto-mode-alist '("\\.jsx$" . web-mode)) |
js2-modeの設定をします。JavaScriptファイルは2タブになるようにします。
(autoload 'js2-mode "js2-mode" nil t) |
Hello World
ライブラリはCDNから取得してかんたんにHello World
をはじめます。最初にプロジェクトを作成します。
$ mkdir ~/helloworld |
index.htmlを作成します。JSXをオンラインで変換するためにJSXTransformer-0.12.2.jsをロードします。JSXを記述したJavaScriptファイルは、text/jsx
を指定してロードすると自動的に変換してくれます。
|
<h1>
要素のところがJSXです。今回はComponentを作成していないので、Top Levelコンポーネントに入ります。
React.render( |
Webサーバーを起動して確認
プロジェクトのディレクトリに移動して、PythonのSimpleHTTPServerを起動します。
$ cd ~/helloworld |
IDCFクラウド上の仮装マシンにDocker開発環境があります。外部からコンテナに接続するために、ngrokを使ってトンネルをつくります。
$ docker inspect --format="{{ .NetworkSettings.IPAddress }}" dev |
ngrokで取得したURLをブラウザで確認するとHello World!
が表示されました。56110a8cはランダムで変わります。
ChromeのReact Developer Tools
Chromeの場合、React Developer Toolsをインストールすると、Reactのデバッグが便利になります。デベロッパーツールにReact
というタブが追加され、以下のようにComponentsを確認することができます。