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

これまで何の前触れもなくチラッと出てきた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>

実行結果

解説

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

参考ページ

reactjs.org