テンプレートエンジンである Jade を React と組み合わせて使ってみます。

インストール

ES6 でプログラムを書くために babel を使います。 Jade の変換には react-jade を使います。それぞれインストールしておきます。

$ npm install -g browserify bablify
$ npm install -D react-jade
$ npm install -S react

Jade の変更用コード

Jade の変換にいい感じのコマンドなどがないようなので自分で書きます。 app.jadeapp.js にコンパイルします。

var fs = require('fs');
var path = require('path');

var jade = require('react-jade');

var code = jade.compileFile(path.join(__dirname, 'app.jade'));
fs.writeFileSync('app.js', 'var React = require("react"); module.exports = ' + code);

これを node で実行すれば app.js ができます。

プログラム

変換される Jade とそれを利用する React プログラムを用意します。

// app.jade
div Hello, World!
// src.js
import React from 'react';

import renderApp from './app';

const App = React.createClass({
    render() {
        return renderApp();
    }
});

React.render(<App />, document.body);

Jade のコンパイル結果は仮想 DOM を返す関数になるので、それを render メソッドから使っています。

app.js を作ったあと browserify -o bundle.js -t babelify src.js というコマンドで bundle.js を作ります。 HTML からそれを読みこめば Hello, World! と表示されるはずです。

値を渡す

Jade に値を渡してみます。

App の定義に少し書き加えます。

const App = React.createClass({
    getInitialState() {
        return {
            name: 'Jade'
        };
    },
    render() {
        return renderApp(this);
    }
});

こうすれば Jade 側から state などの値を使うことができます。

div
  | Hello,
  = state.name
  | !

state.name を Jade から使っています。ほかにも ifeach などの Jade の機能とも組み合わせて使うことができます。

まとめ

  • react-jade で Jade を React 向けにコンパイルできる