2 週間開いてしまった。うーん、継続力が。
概要
この辺を読みます。読んだかもしれないけど、まとめてなかった。
Rendering Elements
React の element はプレーンテキストで簡単に作れるらしい。element は component とはちょっと違っていて、component を構成するもの、らしい。 ちょっとこの時点では概念の使い分けがわかってない。component は次で説明されるので一旦飛ばしてみる。
そんでもって、特定の要素を狙ってレンダリングできるっぽい。
<div id="usada"></div>
これに対して、id を指定してレンダリングできる(ここでは「そういうこと!」が出力される)。
const element = <h1>そういうこと!</h1>;
ReactDOM.render(element, document.getElementById('usada'));
また React の elements はイミュータブルなので変更できない。なので、更新がしたければ、新しく element を作って、 ReactDOM.render() を呼ぶしかない。なんかそれは外から差し込まれて変に値変わるよりは、良いなあというのが個人的な感想。
ちょっとサンプルをいじってみて、出力してみる。
なお、サンプルでは setInterval を通して何度でも呼ぶが、一般的には ReactDOM.render()を 1 度だけ呼んで、ステート管理ができるような componen に何かするらしい(と、Note に書いてある。レンダリング何回もするなと思っているので、「それはそう」という感想)。
function tick() {
const element = (
<div>
<h1>今の時刻をお伝えするぺこ~</h1>
<h2>今は {new Date().toLocaleTimeString()} !
</h2>
</div>
);
ReactDOM.render(element, document.getElementById('usada'));
}
setInterval(tick, 1000);
ReactDOM は更新の必要のある個所だけ更新するつくりらしい。なるほど。ある瞬間での UI の表示を意識することによってバグを排除する思想らしい。
element がイミュータブルで、ReactDOM を使ったレンダリングが必要箇所だけやってくれるよ、っていう理解だけした。
Components and Props
UI の独立性や再利用性を高めるためのもの、らしい。詳細は API ドキュメントへと書かれている。 React.Component – React
JavaScript の function みたいなものを使って、任意の入力を出力するものらしい。任意の入力を受け付けるのが props、ふむふむ。
普通に funtion で JSX 返すだけも component できるし、 ES6 class を用いて component の定義もできるらしい。
こうとかかけるっぽい。
function Welcome(props) {
return <h1>こんぺこ~、 {props.name}</h1>;
}
/* またはこう, ES6 class みたいなもの。
class Welcome extends React.Component {
render() {
return <h1>こんぺこ~、 {this.props.name}</h1>;
}
}
*/
const element = <Welcome name="かなた" />;
ReactDOM.render(element, document.getElementById('usada'));
ちなみに component の名前は大文字で始めるのがルールらしい。Class っぽいね。React が小文字で始まるものは DOM タグ、大文字で始まるものは component として扱うかららしい。 (詳細は JSX In Depth 参照らしい)
まあ当然だけど再利用できるのでこうできる。
function Welcome(props) {
return <h1>こんぺこ~, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="かなた" />
<Welcome name="のえる" />
<Welcome name="るーちゃん" />
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById('usada')
);
次に出てる Extracting Components の例は長いんだけど、実際にユーザープロフィールみたいな component を作って表示してる。 author を dict で渡しといて、 props.author.avatarUrl みたいなのを作ってる。
で、もっと細かくパーツに分けるために Avatar を分けて表示に組み込むみたいなことをやっている。なるほどね…(時間があったら書いてみるかも)。コンポーネントからコンポーネントをたどることで、再利用性を高める例がわかりやすい。
Read-OnlyなPropsも定義できるらしいが、ちょっとどういうことかわかってない(小文字で functions をスタートして、常に同じ結果を返すような感じ…? Pureとは?)。
ただこれだと動的な変更ができないので、ステートという概念が出てくるらしい。
再利用性についてはすごくよくわかった(サンプルがわかりやすい)ので、続きも楽しみ。
おまけ
知らなかった単語を並べる。
- encapsulated: カプセル化
- arbitrary: 任意
まとめ
Component周りの話で、サンプルがわかりやすくて理解に落としやすかった。再利用性を高める… 大事ですよね。部分的にこれ使いたいとか、そういうの結構あるような気がします。 結局部分最適化のためにないかもしれないけど。とはいえ、ふわっと書くというよりかなりロジカルな感じなので、いいなと思います。
ステートも早く読みたいな…。