はじめてのReact #17「CSSを適用する」

  • このエントリーをはてなブックマークに追加
  • LINEで送る

これまで何の前触れもなくチラッと出てきたComponentにCSSを適用する方法について、いよいよ解説したいと思います。まぁブログの構成(順番)を間違えてるだけなんですけどねw もっと早く取り上げるべきだったw

ダイアログ Component

Component名は前回と同じですが、今回はボタンをクリックする度に文字色が変化するサンプルにしてみました。

サンプル

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>Dialog</title>
  <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

  <!-- Don't use this in production: -->
  <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

  <style type="text/css">
    .dialog {
      border: 1px solid gray;
      background-color: beige;
      text-align: center;
    }
  </style>
</head>
<body>

<div id="root"></div>

<script type="text/babel">
class Dialog extends React.Component {
  constructor(props) {
    super(props);
    this.state ={
      i: 0
    }
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(){
    this.setState({
      i: this.state.i + 1
    });
  }

  render() {
    let colormap = ["black", "red", "green", "blue"];
    let i = this.state.i % colormap.length;
    let color = {
      color: colormap[i]
    };

    return (
      <div className="dialog">
        <h1 style={color}>HelloWorld</h1>
        <button onClick={this.handleClick}>チェンジ</button>
      </div>
    );
  }
}

ReactDOM.render(
  <Dialog />,
  document.getElementById('root')
);
</script>
</body>
</html>
- Sponsored Link -

実行結果

解説

CSSの指定方法

通常のHTMLと同様にclassidを利用する方法、style属性を利用する方法の2種類があります。

class/id

サンプルではclass属性を利用しています。通常のHTMLと同様にhead内などでCSSを記述。

  <style type="text/css">
    .dialog {
      border: 1px solid gray;
      background-color: beige;
      text-align: center;
    }
  </style>

render()で以下のようなコードを記述しています。ここで注意すべきはclassではなくclassNameとなっている点ですね。classはJavaScriptで予約語となっているため別名になっています。

    return (
      <div className="dialog">
        <h1 style={color}>HelloWorld</h1>
        <button onClick={this.handleClick}>チェンジ</button>
      </div>
    );

ちなみにidでの指定は以下のようにそのままid属性を記述すればOKです。

  <style type="text/css">
    #dialog {
      border: 1px solid gray;
      background-color: beige;
      text-align: center;
    }
  </style>

  (snip)

    return (
      <div id="dialog">
        <h1 style={color}>HelloWorld</h1>
        <button onClick={this.handleClick}>チェンジ</button>
      </div>
    );

style属性

JSXでは以下のようにstyle属性でスタイルを指定することもできます。このときに渡しているのはスタイルの指定が入った連想配列です。

    return (
        <h1 style={color:"black"}>HelloWorld</h1>
    );

注意点としてはbackground-colorのように間にハイフンが入るプロパティはそのままでは利用できません。このような場合はbackgroundColorのようにハイフンを削除し後半の最初の1文字目を大文字にします。キャメルケースというやつですね。

    return (
        <h1 style={backgroundColor:"red"}>HelloWorld</h1>
    );

サンプルにある通り、最終的に連想配列が渡せれば良いので、変数を記述するのもOKです。

    let css = {color:"white", backgroundColor:"red"};
    return (
        <h1 style={css}>HelloWorld</h1>
    );

書籍

React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで (NEXT ONE)
穴井 宏幸 石井 直矢 柴田 和祈 三宮 肇
翔泳社
売り上げランキング: 139,067

参考ページ

- Sponsored Link -

同じカテゴリの記事

Donate

投げ銭お待ちしております!

BTC3A9nH1j7qQdKrSTrmnEdweo6zPqpHBmkxC
ETH0x1aE0541198D1F9f2908a25C35032A473e74D3731
XPXaQ9zv65F9ovfoMBrFGiPRG47aSHFhy8SX
MONAMTKgzSiS5BDueZkRCHySih24TGFwHThaDQ (MonaCoin)
ZNYZhnpf4RFYVQTAQiyoJg9dGoeC4bgT3BoSy (BitZeny)

ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください