はじめに
こんにちは、swim-loverです。 初心者向けのWebアプリ開発記事です。フロントエンド環境にReact.jsを使用しています。Webアプリ開発記事と述べていますが、未だに、公式ページをお手本にしているだけで、まだまだ道は長いです。。。
第13回では、公式サイトに従い、テスト用ドメインで、イベント処理について実装し確認しました。
引き続き、Reactの勉強を進めていきたいと思います。
React 条件付きレンダー(1)
条件付きレンダー(1)では、条件によって、表示するテキストを変えています。この例では、state “isLoggedIn”がtrue,falseによってテキストの内容を変えています。
“isLoggedIn”がtrueのときは、”Welcome back!”
“isLoggedIn”がfalseのときは、”Please sign up.”を表示しています。
21行目で、”false”とハードコーディングしているので改善したいところです。
const title= document.querySelector('#hello_world_17');
function UserGreeting(props) {
return <h1>Welcome back!</h1>;
}
function GuestGreeting(props) {
return <h1>Please sign up.</h1>;
}
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <UserGreeting />;
}
return <GuestGreeting />;
}
ReactDOM.render(
<Greeting isLoggedIn={false} />,/* Hard cording */
title
);
実行結果になります。

React 条件付きレンダー(2)
条件付きレンダー(2)では、LoginControl Classを作成しています。(34~68行目)
コンストラクタでは、37,38行目でCallbackのBind処理を行い。
39行目で、state “isLoggedIn”の初期値をfalseとしています。
Render処理において、
isLoggedInがtrueのときは、LogoutButtonボタンを作成し、(56行目)
isLoggedInがfalseのときは、LoginButtonボタンを作成しています。(59行目)
callbanck “handleLoginClick”,”handleLogoutClick”内でState “isLoggedIn”を変化させています。(43,47行目)
const title= document.querySelector('#hello_world_18');
function UserGreeting(props) {
return <h1>Welcome back!</h1>;
}
function GuestGreeting(props) {
return <h1>Please sign up.</h1>;
}
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <UserGreeting />;
}
return <GuestGreeting />;
}
function LoginButton(props) {
return (
<button onClick={props.onClick}>
Login
</button>
);
}
function LogoutButton(props) {
return (
<button onClick={props.onClick}>
Logout
</button>
);
}
class LoginControl extends React.Component {
constructor(props) {
super(props);
this.handleLoginClick = this.handleLoginClick.bind(this);/* bind call back */
this.handleLogoutClick = this.handleLogoutClick.bind(this);/* bond callbacl */
this.state = {isLoggedIn: false};/* init state */
}
handleLoginClick() {
this.setState({isLoggedIn: true});/* change state */
}
handleLogoutClick() {
this.setState({isLoggedIn: false});/* change state */
}
render() {
const isLoggedIn = this.state.isLoggedIn;
let button;
if (isLoggedIn) {
console.log('call render() isLoggedIn=TRUE')
button = <LogoutButton onClick={this.handleLogoutClick} />;
} else {
console.log('call render() isLoggedIn=FALSE')
button = <LoginButton onClick={this.handleLoginClick} />;
}
return (
<div>
<Greeting isLoggedIn={isLoggedIn} />
{button}
</div>
);
}
}
ReactDOM.render(
<LoginControl />,
title
);
実行結果になります。

Loginボタンをクリックする。

まとめ
今回も、公式サイトに従い、テスト用ドメインで、条件付きレンダーについて実装し確認しました。

組み込み系ソフトエンジニアをしています。これまでフロントエンド技術は避けてきましたが、食わず嫌いをやめて、勉強を始めました。
趣味は、水泳、ロードバイク、ランニング、登山です。
組み込み系技術ネタ、勉強したフロントエンド技術、たまに趣味の運動について発信していきます。
どうぞよろしくお願いします。
コメント