はじめに
こんにちは、swim-loverです。 初心者向けのWebアプリ開発記事です。フロントエンド環境にReact.jsを使用しています。今の目標は、出席簿アプリを作ることです。
第9回では、公式サイトに従い、テスト用サブドメインでHello Worldの派生からJPG画像の表示、最後には、ユーザー入力のブロックについて確認しました。(sample1-5, sample6-10)
さすがにindex.htmlページにサンプルコードをベタがきしていたので、サンプルページを別ページに分割しました。
引き続き、Reactの勉強を進めていきたいと思います。
React レンダリングの更新処理
定期的にレンダリングの更新処理を行います。
14行目 setInterval()により1秒毎に tick()関数が呼び出されます。現在時刻を取得し表示します。
3箇所のTime Zoneで表示してみました。動きがあるサンプル実装だと少し進化した気分になります。
const title= document.querySelector('#hello_world_9');
function tick() {
const element = (
<div>
<h2>It is {new Date().toLocaleTimeString('en-US',{ timeZone:'America/New_York'})} at NewYork.</h2>
<h2>It is {new Date().toLocaleTimeString('ja-JP',{ timeZone:'Asia/Tokyo'})} at Tokyo.</h2>
<h2>It is {new Date().toLocaleTimeString('en-US',{ timeZone:'UTC'})} UTC time .</h2>
</div>
);
ReactDOM.render(element, title);
}
setInterval(tick, 1000);
React ユーザー定義の関数と’プロパティ(props)’
今回は、elementにユーザ定義の関数を埋め込んでみます。
7行目のelementに’Welcome’というユーザー定義の関数を指定しています。さらに属性nameを指定しています。属性nameに値’Swim Lover’を入れると、props.name=’swim lover’を指定してWelcom関数を呼び出す動作になっています。これは仕様として覚えるしかないのだと思います。
const title= document.querySelector('#hello_world_10');
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Swim Lover" />;
ReactDOM.render(
element,
title
);
結果は特に面白いものではありません。
React ユーザー定義の関数からさらにユーザー定義関数を呼ぶ
App()というユーザー定義関数からWelcomeというユーザー定義関数を呼んでいます。
const title= document.querySelector('#hello_world_11');
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Swin Lover" />
<Welcome name="Bike Lover" />
<Welcome name="Running Lover" />
</div>
);
}
ReactDOM.render(
<App />,
title
);
これも結果は、特に面白いものではありおません。
React Clockコンポーネントのカプセル化
サンプル9でclockの更新処理を実装しました。
以下はサンプル9のコードですが、render処理に渡しているのは、const データであるelementであり、elementの中で、Date()関数をコールしていおり、なにかごちゃまぜ感があり、違和感を感じます。
const title= document.querySelector('#hello_world_9');
function tick() {
const element = (
<div>
<h2>It is {new Date().toLocaleTimeString('en-US',{ timeZone:'America/New_York'})} at NewYork.</h2>
<h2>It is {new Date().toLocaleTimeString('ja-JP',{ timeZone:'Asia/Tokyo'})} at Tokyo.</h2>
<h2>It is {new Date().toLocaleTimeString('en-US',{ timeZone:'UTC'})} UTC time .</h2>
</div>
);
ReactDOM.render(element, title);
}
setInterval(tick, 1000);
React カプセル化 Step1
render処理で、Date()関数で時刻取得を行い、取得したdateを引数として、Clock()コンポーネントを呼び出します。
Clock()コンポーネント作ることで、コードのまとまり感が出てきました。
しかし、Date()関数が、まだ、render()内で呼ばれています。時間処理に関するものは、Clock()内ですべてまとめて行うようにしたほうがより整理されたコードになります。
const title= document.querySelector('#hello_world_12');
function Clock(props) {
return (
<div>
<h2>It is {props.date.toLocaleTimeString()}.</h2>
<h2>It is {props.date.toLocaleTimeString('en-US',{ timeZone:'America/New_York'})} at NewYork.</h2>
<h2>It is {props.date.toLocaleTimeString('ja-JP',{ timeZone:'Asia/Tokyo'})} at Tokyo.</h2>
<h2>It is {props.date.toLocaleTimeString('en-US',{ timeZone:'UTC'})} UTC time .</h2>
</div>
);
}
function tick() {
ReactDOM.render(
<Clock date={new Date()} />,
title
);
}
setInterval(tick, 1000);
まとめ
今回、公式サイトに従い、テスト用ドメインで、React レンダリングの更新処理からClockコンポーネントのカプセル化について確認しました。(sample6-10, sample11-15)
組み込み系ソフトエンジニアをしています。これまでフロントエンド技術は避けてきましたが、食わず嫌いをやめて、勉強を始めました。
趣味は、水泳、ロードバイク、ランニング、登山です。
組み込み系技術ネタ、勉強したフロントエンド技術、たまに趣味の運動について発信していきます。
どうぞよろしくお願いします。
コメント