React里通过使用classNames优化类名控制

介绍

classNames是一个用于动态构建CSS 类名字符串的JavaScript库 ,常用于React 项目中。它可以根据条件 动态地组合类名字符串,简化了在模板中根据逻辑添加或删除CSS类名的过程。使用classNames 可以避免手写复杂的字符串拼接或三元运算符,提高代码的可读性和维护性

基本用法

安装

通过 npmyarn 来安装classNames

命令:

  1. npm install classnames --save
  2. yarn add classnames
引入

React 项目中,可以通过以下方式引入:
import classNames from 'classnames';

在nodejs里引入:
var classNames = require('classnames');

使用

classNames 接受多个参数 ,可以是字符串、对象或布尔值。它会根据传入参数的真值来决定是否添加对应的类名。

下面对比普通字符串拼接实现动态类名及使用classnames来实现动态类名。

普通字符串拼接

这里直接使用了上篇文章的部分代码,具体的字符串拼接完整页面文档可参考上篇文章。

js 复制代码
{tabList.map(item =>
   <span key={item.type}
     className={`type-tab ${ currentType == item.type && 'activeType'}`}
     onClick={() => checkType(item.type)}
   >{item.tab}</span>
 )}

分析: 这里使用了 字符串拼接的方式 来实现了动态控制类名的显示与隐藏;

缺点: 当类名过多的时候,使用 字符串拼接的方式 ,不直观,也很容易出错。

classNames
  1. 直接在页面里添加classNames , 这里直接对比上方的 字符串拼接的方式的代码,进行修改
js 复制代码
{tabList.map(item =>
   <span key={item.type}
     className = {classNames('type-tab', {activeType: currentType == item.type})}
     onClick={() => checkType(item.type)}
   >{item.tab}</span>
 )}
  1. 在js里定义,然后在页面通过className直接使用。
js 复制代码
// css部分
.redStyle {
  color: red;
}
.sizeStyle {
  font-size: 26px;
}
//  js 部分
// js引入  classnames
import classNames from 'classnames'
//  定义是否显示
const isRed = true;
const isSize = true;
//  定义样式,word-style是默认样式,对象里的另外两个是通过条件控制的样式。
const moreStyle = classNames('word-style',{
  'redStyle' : isRed,
  'sizeStyle': isSize,
})
console.log(moreStyle)  // word-style redStyle sizeStyle
// html部分
 <p className={moreStyle}>这是一段文字</p>

分析:这里使用了 classnames的方式,来添加动态类名;可以通过条件来组合类名,以对象来控制是否显示当前类名。

优点:

  • 简化代码: 避免手写复杂的字符串拼接或三元运算符,减少代码量。
  • 提高可读性: 代码更清晰明了,易于维护。
  • 减少错误: 减少手动拼接字符串导致的错误,如多余的空格或漏掉的类名‌。
相关推荐
郝开2 小时前
扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解
react.js·前端框架·react
weifont4 小时前
React中的useSyncExternalStore使用
前端·javascript·react.js
初遇你时动了情4 小时前
js fetch流式请求 AI动态生成文本,实现逐字生成渲染效果
前端·javascript·react.js
几何心凉5 小时前
如何使用 React Hooks 替代类组件的生命周期方法?
前端·javascript·react.js
zoe_ya12 小时前
react-diff-viewer 如何实现语法高亮
javascript·react.js·ecmascript
郝开12 小时前
扩展:React 项目执行 yarn eject 后的 config 目录结构详解
react.js·前端框架·react
sunbyte12 小时前
Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
开发语言·javascript·react.js
EndingCoder1 天前
跨平台移动开发框架React Native和Flutter性能对比
flutter·react native·react.js
sunbyte1 天前
Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
javascript·react.js·3d
Python私教1 天前
使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
前端·react.js·fastapi