React中classnames库使用

简介: 【10月更文挑战第7天】

最近在写React的项目中,看到之前的大佬引入的classnames组件库,特别的实用,在此跟大家分享一下。

从名字上可以看出,这个库是和类名有关的。官方的介绍就是一个简单的支持动态多类名的工具库。

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函数的使用
classNames 函数接受任意数量的参数,可以是string、boolean、number、array、dictionary等。

参数 'foo' 是 { foo: true } 的缩写。如果与给定键关联的值是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'

数组的形式
数组可以按照上面的规则,递归展开数组中的每一项:

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

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

ES6中使用动态类名

let buttonType = 'primary';`

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

结合React一起使用
这个包是classSet的官方替代品,她最初是在React.js插件包中提供的。

常见的一个应用场景是根据条件动态设置类名,在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>;

}

}

因为可以将对象、数组和字符串参数混合在一起,所以支持可选的 className props 也更简单,因为只有真实的参数才会包含在结果中:

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

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

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

});

总结:
在React项目中使用classnames是非常方便我们管理动态多类名。为我们的工作真正的提效。

相关文章
|
6月前
|
缓存 前端开发 JavaScript
【第58期】React 开发者的 Awesome 库
【第58期】React 开发者的 Awesome 库
158 1
|
6月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
355 0
|
6月前
|
存储 前端开发 JavaScript
【第39期】一文认识React的状态管理库
【第39期】一文认识React的状态管理库
166 0
|
6月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
120 0
|
1月前
|
前端开发 JavaScript API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
107 4
React开发需要了解的10个库
|
15天前
|
资源调度 前端开发 JavaScript
React 测试库 React Testing Library
【10月更文挑战第22天】本文介绍了 React Testing Library 的基本概念和使用方法,包括安装、基本用法、常见问题及解决方法。通过代码案例详细解释了如何测试 React 组件,帮助开发者提高应用质量和稳定性。
28 0
|
2月前
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
52 10
React技术栈-react使用的Ajax请求库实战案例
|
2月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
32 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
3月前
|
存储 前端开发 JavaScript
|
4月前
|
存储 前端开发 JavaScript
前端框架与库 - React基础:组件、Props、State
【7月更文挑战第12天】React是JavaScript库,专注UI构建,基于组件化。组件是UI模块,可函数式或类定义。Props是组件间安全传递数据的只读参数,用defaultProps和propTypes保证正确性。State则是组件内部可变数据,用于驱动更新。使用setState()确保正确变更和渲染。了解并妥善处理这些概念是高效React开发的基础。
70 7