前回はこちら → Reactチュートリアル覚書 その1 - Qiita http://qiita.com/masarufuruya/items/9755673c6e9f796a8924
-
今回はUsing props〜Adding Markdownまでをやった。以下学びをまとめる
コンポーネントから別のコンポーネントを呼び出すことが出来る
- 覚書その1の時点ではコンポーネントの呼び出しは
ReactDOM.render
時に行っていた
ReactDOM.render(
<CommentBox />,
document.getElementById('content')
);
- 今回の範囲ではCommentBoxコンポーネントから別のコンポーネントを呼び出す書き方が出てくるため、作ったコンポーネント同士で呼び出すことが出来ることを学んだ
var CommentBox = React.createClass({
render: function() {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList />
<CommentForm />
</div>
);
}
});
データは親コンポーネントで管理し、子コンポーネントは使うだけ
- コメントのデータ(作成者、作成日時、内容)をコンポーネントの外部から受けとり、表示を変えたい場合はpropsを使う
- propsを渡すには、コンポーネントを呼び出す時に渡したい名前の属性をつけてやる
- propsは親のコンポーネントから子のコンポーネントがデータを受け取るための手段
- 子コンポーネントがデータを更新してしまうと、どこでデータが変更されているか把握するのが困難になるので、データの管理は親コンポーネントで行う
参考URL: React.jsでPropやStateを使ってComponent間のやりとりをする - Qiita http://qiita.com/koba04/items/43200b6fd6e6f43f0d8d
JSX内の波括弧{}はJavascriptの値を出力したい時に使う
- {}内ではコンポーネント内で定義した変数、関数、グローバル変数、Reactの組み込みプロパティを取得して出力することができる
- {}内で変数を定義したり条件分岐させるようなコードはかけずあくまで取得のみに利用できる
render: function() {
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
<span dangerouslySetInnerHTML={this.rawMarkup()}></span>
</div>
);
}
サニタイズを無効にしたい場合はdangerouslySetInnerHTMLを使う
- dangerouslySetInnerプロパティをつけて__htmlキーの中にサニタイズを無効にしたいHTMLを返すようにする
rawMarkup: function() {
var md = new Remarkable();
return {
__html: md.render(this.props.children)
};
},
render: function() {
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
<span dangerouslySetInnerHTML={this.rawMarkup()}></span>
</div>
);
}