jsxを使っています。
JSX is a XML-like syntax extension to ECMAScript without any defined semantics.
jsxとはECMAScriptにXMLのようなシンタックスを拡張したものです。
// Using JSX to express UI components.
var dropdown =
<Dropdown>
A dropdown list
<Menu>
<MenuItem>Do Something</MenuItem>
<MenuItem>Do Something Fun!</MenuItem>
<MenuItem>Do Something Else</MenuItem>
</Menu>
</DropDown>;
render(dropdown);
このようなHTMLのDOMのようなものをそのまま書くことができます。jsxで書いたコードをjsに変換して使う必要があります。
jsx の変換方法は大きく2つあります。
jsxtransformer.jsを使ってブラウザ上で変換する方法です。
<!-- In-browser JSX transformer, remove when pre-compiling JSX. -->
<script src="http://fb.me/JSXTransformer-0.12.2.js"></script>
jsdelivrにもあがっています。 こちらを読み込んであげれば<script type="text/jsx">
がjsに変換されるので導入が簡単にできます。しかし、パフォーマンス的にいい理由が全くないのでプロダクト環境等ではおすすめしないです。
jsxを使う前に変換して置く方法です。 react-toolsを用います。
最初にnpmを用いてinstallしておきます。
npm install -g react-tools
次に変換したいfileがsrc下にあるとすると(src/hello.js)
jsx --watch src/ build/
とコマンドを打つことにより変換されたものがbuild下に配置されます。 またwatchしているのでfile変更後自動的に更新されます。
またビルドツールで行うことも可能です。alexmingoia/gulp-jsxやandreypopp/reactifyなど様々な方法でpre-compileすることが可能です。
#example
のエレメントにHello worldを描画させるjsxはこのようになる。
React.render(
<h1>Hello, world!</h1>,
document.getElementById('example')
);
renderの第1引数にDOMの中身が書かれていて、第2引数に対象が書かれている。 こちらをjsに変換すると、
React.render(
React.createElement('h1', null, 'Hello, world!'),
document.getElementById('example')
);
と変換される。 React#createElementはcreateElementは(要素名, 属性のオブジェクト,子要素)
となるようです。 変換後の内容で実装することも可能ですが、nestが深くなるとめんどくさくなったのでやめることにしました。素直にjsx使った方がよさそうです。
仮想DOMの大枠やreactの概要がなんとなくわかってきました。個人的にはjsxの書き方が気持ち悪く感じました。今回は大雑把な使い方を調べただけなので、今後はdiffやpatchのアルゴリズムがどうなっているかや他の仮想DOMとの違いをみていきたいです。