React Bootstrap
reactjsでWebページを作るときに、reactjs用のBootstrapが存在することがわかったので、ためしてみた。
React BootstrapのGetting started
の説明が雑なのか、自分のjsの知識が乏しいがためか、アラートメッセージ一つ出すのに時間がかかったので、やり方をメモする。
Getting startedを読む
Getting startedには、CommonJS
とAMD
とBrowser globals
の3つの方法が紹介されていて、この時点でCommonJS
とAMD
というキーワードに初学者は悩む。(最初はAMD
がANDのtypoだと思っていた)
それぞれ、以下を読んでなんとなく把握する。(サーバーサイド側のjsの依存関係を解決するための仕様と実装のようだ。サーバーサイド側の話だと思っている、AMDは違うかもしれない)
JavaScriptのモジュール管理(CommonJSとかAMDとかBrowserifyとかwebpack)
CommonJSの話
Browser globalsを試す
赤字でreact-bootstrap.min.js
が必要だと書いてあります。
このまま、htmlにコードをはって実行しても、動きません。
以下のパスにjsを用意する必要があります。
"path/to/react-bootstrap-bower/react-bootstrap.min.js"
react-bootstrap.min.jsを入手する
CommonJS
のコード例にあった、以下を実行。npm
を事前にインストールする必要があるので、そこまでも結構時間がかかった。
(npm
は、nodebrew
をインストールして追加しました)
$ npm install react
$ npm install react-bootstrap
react-bootstrap
をイントールすると、~/node_modules/react-bootstrap/dist
ディレクトリにreact-bootstrap.min.js
がダウンロードされる。
このreact-bootstrap.min.js
をhtmlから読める場所にコピーする。
Alertコンポーネントを動かす
その後、いろいろ試行錯誤の結果、なんとか動かいた。ポイントは以下。
-
bootstrap.min.css
が必要 -
react.js
とJSXTransformer.js
は、facebookのcdnを利用 -
react-bootstrap.min.js
は前の手順でnpm
で入手したものをパスで指定。(htmlから読める場所) - React Bootstrapのサンプルのとおり
var Alert = ReactBootstrap.Alert;
だけでは画面に描画されない。-
ReactBootstrap.Alert
で生成した、Alert
変数を使って、alertInstance
を生成。 -
React.render
メソッドをコールして、DOMの指定をする。- このあたりはReact.jsを知っていればすぐわかる話なのかもしれない。以下を参考にしました。
-
<!DOCTYPE html>
<html>
<head>
<title>test01</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://fb.me/react-0.13.3.min.js"></script>
<script src="https://fb.me/JSXTransformer-0.13.3.js"></script>
<script src="js/react-bootstrap.min.js"></script>
<script type="text/jsx;harmony=true">
var Alert = ReactBootstrap.Alert;
const alertInstance = (
<Alert bsStyle='warning'>
アラートメッセージ
</Alert>
);
React.render(
alertInstance,
document.getElementById('test-container')
);
</script>
</head>
<body>
<div id="test-container"></div>
</body>
</html>
でた。