React中classnames庫使用

最近在寫React的項(xiàng)目中,看到之前的大佬引入的classnames組件庫,特別的實(shí)用,在此跟大家分享一下。

從名字上可以看出,這個(gè)庫是和類名有關(guān)的。官方的介紹就是一個(gè)簡(jiǎn)單的支持動(dòng)態(tài)多類名的工具庫。

classnames的引入

支持使用 npm, Bower, or Yarn

使用 npm安裝

npm install classnames

使用 Bower安裝

bower install classnames

使用 Yarn安裝

yarn add classnames

引入

import classnames from ‘classnames’;

使用 Node.js, Browserify, or webpack:

var classNames = require('classnames');

classNames('foo', 'bar'); // => 'foo bar'

classnames函數(shù)的使用

classNames 函數(shù)接受任意數(shù)量的參數(shù),可以是string、boolean、number、array、dictionary等。

image.png

參數(shù) 'foo' 是 { foo: true } 的縮寫。如果與給定鍵關(guān)聯(lián)的值是false的,則該key值將不會(huì)包含在輸出中。


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'

數(shù)組的形式

數(shù)組可以按照上面的規(guī)則,遞歸展開數(shù)組中的每一項(xiàng):

var arr = ['b', { c: true, d: false }];`

classNames('a', arr); // => 'a b c'

ES6中使用動(dòng)態(tài)類名

let buttonType = 'primary';`

classNames({ [`btn-${buttonType}`]: true });

結(jié)合React一起使用

這個(gè)包是classSet的官方替代品,她最初是在React.js插件包中提供的。

常見的一個(gè)應(yīng)用場(chǎng)景是根據(jù)條件動(dòng)態(tài)設(shè)置類名,在React中是會(huì)寫出如下的代碼:

class Button extends React.Component {

// ...

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>;

}

}

使用classnames可以通過對(duì)象非常方便的寫出條件多類名。

var classNames = require('classnames');

class Button extends React.Component {

// ...

render () {

    var btnClass = classNames({

    btn: true,

   'btn-pressed': this.state.isPressed,

   'btn-over': !this.state.isPressed && this.state.isHovered

});

return <button className={btnClass}>{this.props.label}</button>;

}

}

因?yàn)榭梢詫?duì)象、數(shù)組和字符串參數(shù)混合在一起,所以支持可選的 className props 也更簡(jiǎn)單,因?yàn)橹挥姓鎸?shí)的參數(shù)才會(huì)包含在結(jié)果中:

var btnClass = classNames('btn', this.props.className, {

'btn-pressed': this.state.isPressed,

'btn-over': !this.state.isPressed && this.state.isHovered

});

總結(jié):

在React項(xiàng)目中使用classnames是非常方便我們管理動(dòng)態(tài)多類名。為我們的工作真正的提效。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近在寫React的項(xiàng)目中,看到之前的大佬引入的classnames組件庫,特別的實(shí)用,在此跟大家分享一下。 從名...
    胖虎不會(huì)飄閱讀 1,575評(píng)論 0 1
  • Classnames A simple javascript utility for conditionally ...
    DiligentLeo閱讀 7,466評(píng)論 0 0
  • 翻譯自:https://jestjs.io/docs/zh-Hans/configuration最新更新:2020...
    秋名山車神12138閱讀 22,002評(píng)論 0 7
  • 安裝 React React 可以被靈活地運(yùn)用在各種項(xiàng)目中。你可以用它創(chuàng)建新的應(yīng)用程序,也可以逐漸地將其添加到現(xiàn)有...
    靜默虛空閱讀 437評(píng)論 0 0
  • 安裝 React 可以在各種各樣的項(xiàng)目中靈活使用。你既可以使用它創(chuàng)建新的應(yīng)用,也可以在現(xiàn)有的代碼庫中逐步引入它,而...
    soojade閱讀 339評(píng)論 0 0

友情鏈接更多精彩內(nèi)容