Webアプリ開発 React.js フロントエンド環境 Part(14)

未分類

はじめに

こんにちは、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ボタンをクリックする。

まとめ

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

コメント

タイトルとURLをコピーしました