根據(jù)條件渲染className

在前端開發(fā)中,我們經(jīng)常會(huì)遇到需要根據(jù)不同條件設(shè)置class的值

就像這樣

var Button = React.createClass({
  // ...
  render () {
    var btnClass = 'btn';
    if (this.state.isPressed) {
      btnClass += ' btn-pressed'
    } else if (this.state.isHovered) {
      btnClass += ' btn-over';
    return (
         <button className={btnClass}>{this.props.label}</button>
      )
  }
});

上面示例代碼中唱逢,如果this.state.isPressed是true吴侦,則button的classname就是,'btn'+'btn-pressed'坞古。如果this.state.isHovered是true备韧,則button的classname就是,'btn'+'btn-over'绸贡。

通過條件語句判斷來設(shè)置classname的確定值盯蝴。這樣的寫法不太簡潔也不優(yōu)雅。

現(xiàn)在通過classnames听怕,我們可以很簡單的寫出符合上面需求的代碼

classnames是一個(gè)可以讓你簡單的有條件設(shè)置className值的js工具捧挺。使用方法非常簡單

//引入classNames
import classnames from "classnames"

const Button = React.createClass({
  // ...
  render () {
    let btnClass = classnames({
      'btn': true,
      'btn-pressed': this.state.isPressed,
      'btn-over': !this.state.isPressed && this.state.isHovered
    });
    // 當(dāng)this.state.isPressed,而this.state.isHovered為false時(shí)尿瞭,這里的'btnClass'就是'btn btn-pressed'
    return <button className={btnClass}>{this.props.label}</button>;
  }
});

classnames函數(shù)可以設(shè)置任意數(shù)量的參數(shù)闽烙,這些參數(shù)可以是字符串也可以是對(duì)象。如果參數(shù)的值是fasly声搁,那么它就不會(huì)被輸出.

classnames('foo', 'bar'); // => 'foo bar',
classnames('foo', { bar: true }); // => 'foo bar'
classnames({ 'foo-bar': true }); // => 'foo-bar'
classnames({ 'foo-bar': false }); // => ''
classnames({ foo: true }, { bar: true }); // => 'foo bar'
classnames({ foo: true, bar: true }); // => 'foo bar'

// lots of arguments of various types
classnames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'

// other falsy values are just ignored
classnames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'

classnames也支持ES6的模板字符串

var arr = ['b', { c: true, d: false }];
classnames('a', arr); // => 'a b c'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黑竞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疏旨,更是在濱河造成了極大的恐慌很魂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檐涝,死亡現(xiàn)場離奇詭異遏匆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谁榜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門幅聘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窃植,你說我怎么就攤上這事帝蒿。” “怎么了巷怜?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵葛超,是天一觀的道長。 經(jīng)常有香客問我延塑,道長巩掺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任页畦,我火速辦了婚禮胖替,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豫缨。我一直安慰自己独令,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布好芭。 她就那樣靜靜地躺著燃箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舍败。 梳的紋絲不亂的頭發(fā)上招狸,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天敬拓,我揣著相機(jī)與錄音,去河邊找鬼裙戏。 笑死乘凸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的累榜。 我是一名探鬼主播营勤,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼壹罚!你這毒婦竟也來了葛作?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤猖凛,失蹤者是張志新(化名)和其女友劉穎赂蠢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辨泳,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡客年,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漠吻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片量瓜。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖途乃,靈堂內(nèi)的尸體忽然破棺而出绍傲,到底是詐尸還是另有隱情,我是刑警寧澤耍共,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布烫饼,位于F島的核電站,受9級(jí)特大地震影響试读,放射性物質(zhì)發(fā)生泄漏杠纵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一钩骇、第九天 我趴在偏房一處隱蔽的房頂上張望比藻。 院中可真熱鬧,春花似錦倘屹、人聲如沸银亲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽务蝠。三九已至,卻和暖如春烛缔,著一層夾襖步出監(jiān)牢的瞬間馏段,已是汗流浹背轩拨。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留院喜,地道東北人亡蓉。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像够坐,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崖面,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理元咙,服務(wù)發(fā)現(xiàn),斷路器巫员,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程庶香,因...
    小菜c閱讀 6,404評(píng)論 0 17
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 3,660評(píng)論 0 7
  • 雖是一名九零后,卻在也沒有剛畢業(yè)時(shí)的那種敢拼敢闖简识,不再是敢說敢想赶掖。 猶如一塊沒有打磨過的石頭,經(jīng)過多年的河水...
    萬物之靈氣閱讀 208評(píng)論 0 2
  • 不管走得多遠(yuǎn)七扰,到最后終究還是會(huì)回到原點(diǎn)奢赂。 人生本就是一場孤獨(dú)的跋涉,在這段旅途中會(huì)遇上很多人颈走,或與你擦肩而過膳灶,...
    河洛丶閱讀 117評(píng)論 0 0