網(wǎng)站首頁 編程語言 正文
classnames的引入
從名字上可以看出,這個庫是和類名有關(guān)的。官方的介紹就是一個簡單的支持動態(tài)多類名的工具庫。
支持使用 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:
Node.js, Browserify, webpack:
var classNames = require('classnames');
classNames('foo', 'bar'); // => 'foo bar'
classnames函數(shù)的使用
classNames 函數(shù)接受任意數(shù)量的參數(shù),可以是string、boolean、number、array、dictionary等。
type?ClassValue?=?string?I?number?I?ClassDictionary?I?ClassArray?I?undef?inednull?I?boolean;
參數(shù) 'foo' 是 { foo: true } 的縮寫。如果與給定鍵關(guān)聯(lián)的值是false的,則該key值將不會包含在輸出中。
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ù)組中的每一項:
var arr = ['b', { c: true, d: false }];`
classNames('a', arr); // => 'a b c'
ES6中使用動態(tài)類名
let buttonType = 'primary';`
classNames({ [`btn-${buttonType}`]: true });
結(jié)合React一起使用
這個包是classSet的官方替代品,她最初是在React.js插件包中提供的。
常見的一個應(yīng)用場景是根據(jù)條件動態(tài)設(shè)置類名,在React中是會寫出如下的代碼:
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可以通過對象非常方便的寫出條件多類名。
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>;
}
}
因為可以將對象、數(shù)組和字符串參數(shù)混合在一起,所以支持可選的 className props 也更簡單,因為只有真實的參數(shù)才會包含在結(jié)果中:
var btnClass = classNames('btn', this.props.className, {
'btn-pressed': this.state.isPressed,
'btn-over': !this.state.isPressed && this.state.isHovered
});
總結(jié):
在React項目中使用classnames是非常方便我們管理動態(tài)多類名。為我們的工作真正的提效。
原文鏈接:https://juejin.cn/post/7159132262548635684
相關(guān)推薦
- 2022-03-14 golang實現(xiàn)子網(wǎng)掩碼和網(wǎng)絡(luò)位長度相互轉(zhuǎn)換
- 2022-10-09 淺談C++中各種不同意義的new和delete的使用_C 語言
- 2022-06-11 利用Nginx實現(xiàn)URL重定向的簡單方法_nginx
- 2022-05-29 Android?老生常談LayoutInflater的新認(rèn)知_Android
- 2022-06-12 淺談Android?Dialog窗口機(jī)制_Android
- 2022-09-13 fastlane自動化打包iOS?APP過程示例_IOS
- 2022-10-12 pandas學(xué)習(xí)之df.set_index的具體使用_python
- 2022-05-12 HarmonyOS 單擊 雙擊 長按 滑動事件
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支