React - カスタムコンポーネントの基本
カスタムコンポーネントを作ってレンダーする
前回、HTML要素からコンポーネントを作成し、レンダーする方法を学んだ。
一方でReactではHTML要素をコンポーネントにするよりも、カスタムコンポーネントを作る場合のほうが多い。 カスタムとは具体的に、「独自のスタイル要素を指定してH1要素にデザインをあてる」といった意味ではなく、 部品となるカスタムコンポーネントをクラスとして定義して、HTMLドキュメントに要素を差し込む、という意味です。
手順
といった手順を踏んで、カスタムコンポーネントを定義し、レンダーします。
書いてみる
ディレクトリ構造はこのようになっています。
. └── hello_react ├── sample.html └── src └── react_script.js
sample.html
HTMLはいつもどおりです。bodyにid=content
のdiv要素を置いておきます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Hello React</title> <script src="https://unpkg.com/react@15/dist/react.js"></script> <script src="https://unpkg.com/react-dom@15/dist/react-dom.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <script type="text/babel" src="src/react_script.js"></script> </head> <body> <div id="content"> </div> </body> </html>
このid=content
のdiv要素の中身にカスタムコンポーネントとして、以下のコンポーネントを差し込みます。
<div class="hello-world-box"> <h1>Hello World!!</h1> </div>
src/script.js
var HelloWorldBox = React.createClass({ render: function () { return ( <div className="helloWorldBox"> <h1>Hello World!!</h1> </div> ); } });
順を追って、読んでみます。
はじめに、1行目でReact.createClass
メソッドで定義するカスタムコンポーネントをHelloWorldBox
変数に代入します。
カスタムコンポーネントの命名規則として、代入する変数名はキャメルケースとなっています。
そして、クラスの中身としてrenderメソッドを定義しています。 ここでは、レンダーしたいHTML要素を返すようにしています。
ここで注意ですが、クラス名についてHTML的な表記ではなくてclassName="helloWorldBox"
というような表記へと変える必要があります。
ReactDOM.render( <HelloWorldBox />, document.getElementById('content') );
次に、このカスタムコンポーネントを基にして要素を作成し、HTMLドキュメントに差し込む位置を指定して、レンダーする部分を書いています。 こちらは、通常のコンポーネントと同じです。
全体としてはこのようなかたちになります。
var HelloWorldBox = React.createClass({ render: function () { return ( <div class="helloWorldBox"> <h1>Hello World!!</h1> </div> ); } }); ReactDOM.render( <HelloWorldBox />, document.getElementById('content') );
ちなみにですが、<HelloWorldBox />
の部分は
React.createElement(HelloWorldBox)
という風にも書けます。
動作を確認してみます。
うまく、差し込まれていることがわかります。
以上です。
参考
WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用
- 作者: 柴田文彦
- 出版社/メーカー: インプレス
- 発売日: 2016/11/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
入門 React ―コンポーネントベースのWebフロントエンド開発
- 作者: Frankie Bagnardi,Jonathan Beebe,Richard Feldman,Tom Hallett,Simon HØjberg,Karl Mikkelsen,宮崎空
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/04/03
- メディア: 大型本
- この商品を含むブログ (2件) を見る