[フロントエンド] React.jsのclassNameに、複数のクラスを簡単に指定する(Classnames利用)
こんにちは、@yoheiMuneです。
今日は、React.jsにおける
最後になりますが本ブログでは、フロントエンド、PHP、サーバー、インフラ、Swift、Node.js、Python、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は、React.jsにおける
className
の便利な指定方法をブログに書きたいと思います。目次
問題は何か?
React.jsでDOMにCSSクラスを指定する場合には、className
プロパティを使います。{/*CSSクラスを指定する例*/} <div className={'login'}> ログイン </div>1つだけ指定するには問題ないのですが、複数指定するときは少し面倒です。
{/*CSSクラスを複数指定する例*/} <div className={'login' + ' ' + 'is_active'}> ログイン </div>また、条件によってクラス付与を変えたいとなると、さらに大変です。
{/*CSSクラスを条件によって指定を変更したい例*/} <div className={'login' + ' ' + (this.state.isActive ? 'is_active' : '')}> ログイン </div>これらの書き方がなかなか煩雑なので、なんとか楽をしたいというのが今回のお話です。
classNamesライブラリを利用する
Classnamesというライブラリを使うと、上記を楽に記載できます。ライブラリの導入
インストールは、npm経由で行います。npm install classnames --saveそしてコード上で以下のようにインポートします。
// ES6バージョンの場合 import classNames from 'classnames' // require形式の場合 const classNames = require('classnames')
ライブラリの利用
以下のように利用します。// CSSクラスの複数指定を作成したい場合 classNames('login', 'is_active') // => 'login is_active' // 条件に応じて、CSSクラスを追加したい場合 classNames('login', { 'is_active' : this.state.isActive })このように、複数のCSSクラス指定や、条件によるCSSクラスの追加を分かりやすく実装できます。React.jsでの実装例は以下の通りです。
render () { var loginClass = classNames('login', { 'is_active' : this.state.isActive }) return ( <div className={loginClass}> ログイン </div> ) }
CSSモジュールとの併用
以前のブログで紹介したReact.jsでCSSモジュールを利用する場合にも、Classnamesライブラリを利用することが可能です。Computed Keyという仕組み(ES2015またはBabel)を利用します(create-react-appでアプリを作成している場合には、設定なしで動作します)。// CSS読み込み import styles from './Login.css' // ...中略... // CSSモジュールでの利用例 classNames(styles.login, { [styles.is_active] : this.state.isActive })
最後に
React.jsで何本もアプリを開発してきましたが、まだまだ学べることが多くて楽しいですね。色々とブログにも残せたらと思いますので、ぜひ今後もよろしくお願いします。最後になりますが本ブログでは、フロントエンド、PHP、サーバー、インフラ、Swift、Node.js、Python、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!