前回に続いてReactをやって行こうと思います。
JSX
前回の構成ですが、
.
├── README.md
├── index.html
├── package.json
├── src
│ ├── container.js
│ └── hello.jsx
└── webpack.config.js
こんな感じでした。(なぜかREADME.mdが入っちゃってますが無視して下さい)
大まかな起動の流れとしては、
webpack.config.js
で指定したパスのモジュールをbabelで変換- この時
hello.jsx
がjsにコンパイルされる - コンパイルされ出力された
bundle.js
をindex.htmlでロード
このような流れになります。
ここで、
XML-likeにタグを書いてjsにコンパイルして使うものです。
JSX
というのが出てきましたが、何かというと・・・XML-likeにタグを書いてjsにコンパイルして使うものです。
詳しくはこちら
prop
次はただ表示させるだけのサンプルではなく、動くものを作ってみたいと思います。
と言う訳で画面に現在時刻を表示させてみたいと思います。
前回の
前回の
hello.jsx
を以下のように修正します。import React from 'react';
import ReactDOM from 'react-dom'
class Hello extends React.Component {
render() {
return (
<div>
<h1>Hello</h1>
<p>
Now : {this.props.date.toTimeString()}
</p>
</div>
);
}
}
setInterval(function() {
ReactDOM.render(
<Hello date={new Date()} />,
document.getElementById('container')
);
}, 1000);
実行して↓のように現在時刻をリアルタイムに表示してくれてればOKです。
この時
ERROR in ./src/hello.jsx
Module build failed: SyntaxError:
/Users/XXX/src/hello.jsx:
Adjacent JSX elements must be wrapped in an enclosing tag (8:6)
このようなエラーが出る場合はタグがちゃんと囲まれてない場合があります。
※ どうもJSXでは一つのタグで囲まれたものしかreturnできないようです
※ どうもJSXでは一つのタグで囲まれたものしかreturnできないようです
ここで出てきた
子コンポーネントのプロパティとして扱う事ができ、アクセスする際は
props
ですがこれは親コンポーネントなどから渡されたデータを子コンポーネントのプロパティとして扱う事ができ、アクセスする際は
props
を使用します。
上のサンプルでは
setInterval
で1秒おきに描画してますが、その際にdate={new Date()}
でdateに現在時刻を設定し、子コンポーネントのHelloで{this.props.date.toTimeString()}
にてプロパティからdate
にアクセスしています。
0 件のコメント:
コメントを投稿