本文中展示的,都是多className情况下的写法,提供的写法都是笔者个人的一些经验总结,并不一定是最标准的写法,但是符合高内聚,低耦合的工程思想。

(ps:csdn里貌似 jsx 的代码高亮有些问题,我就用模板字符串包住了)

一、模板字符串的写法

//写法一
export default class A extends Component {state ={work: true,sabbatical: false,}render(){return (`<div className={`calend-item ${work ? '' : "off-day"} ${sabbatical ? "sabbatical" : ''}`}>{/*...............*/}</div >`)}
}//写法二
export default class B extends Component {state ={work: true,sabbatical: false,}render(){return (`<divclassName={`'calend-item'${work ? ''  : "off-day"}${sabbatical ? "sabbatical" : ''}`}>{/*...............*/}</div >`)}
}

写法一:模板字符串非折叠的写法,不仅代码看起来非常的恶心,而且万一少一个空格隔开,是没有错误提示的(这点是最致命的),同时最后render出的html结构中还会带来无意义的空格(见下图 )。

写法二:模板字符串折叠的写法,虽然代码看起来清楚了些也不会少敲空格,但是最后render出的html结构中不仅有空格,还有换行(见下图)显然是顾此失彼。

二、formatClass的方法

显然模板字符串带来了很多的麻烦。既然className本质上就是要得到一个字符串,那么我们就自己写个方法来得到目标字符串。

//写法三
export default class A extends Component {state ={work: true,sabbatical: false,}render(){//可以将所有的className属性都塞入下面的对象中let _class = formatReactClass({item: ['calend-item',work ? null : "off-day",sabbatical ? "sabbatical" : null,]})return (`<div className={_class.item} >{/*...............*/}</div >`)}
}//下面俩函数可以放到自己项目里的工具函数模块中/*** @description: 格式化组件class* @param {Object} classObj* @return {Object}*/
function formatReactClass(classObj) {return mapObj(classObj, i =>Array.isArray(i) ? i.filter(i => i && i !== '').join(' ') : i);
}/*** @description: map对象* @param {Object} Obj* @param {Function} callback should be returnable* @return {Object}*/
function mapObj(Obj, callback) {let res = {};Object.keys(Obj).forEach(i => (res[i] = callback(Obj[i])));return res;
}

写法三:我们将所有的className属性的值都塞入一个对象中(高内聚思想的体现),同时使用formatReactClass工具函数格式化我们的_class对象。使我们的无论是代码中,还是最后render出的html结构中的class属性都十分的规整。

三、总结

        除了上述写法、还可以引入如 classnames 等三方的库来解决问题。笔者的写法不一定是最好的,但无论是从开发代码的规整度,还是从二次翻阅代码的舒适度、都是目前个人觉得不错的一个写法。

React className的写法相关推荐

  1. react 的样式写法

    react 的样式写法 内联样式 const Home3 = function () {return (//这里第一个大括号表示要插入js语法了,第二个大括号表示对象的括号<div style ...

  2. react classname多个_React全家桶简介

    当前前端开发已经进入以vue.react.webpack为代表的编程2.0时代.在1.0时代,代码是写给机器的:在2.0时代,代码是写给工具的,然后由工具处理后再转给机器. 一.React全家桶简介 ...

  3. react 展开收起写法(手动展开收起 和 自动展开收起)

    一:手动展开收起 html写法: <div className="pack-unfold">{isShow.includes(item.chapterId)?<s ...

  4. react生命周期写法

    一. 挂载阶段 Mounting componentWillMount: 在组件即将被挂载到页面的时刻执行. 在组件挂载到DOM前调用,且只会被调用一次,在这边调用this.setState不会引起组 ...

  5. 手把手教你React(一)JSX与虚拟DOM

    初衷 学习React有一段时间了, 一直想找个时间写一个React的系列文章.忙里抽闲,完成了第一篇.写这系列文章的初衷是总结这段时间的技术学习,以及给那些想学习React的同学们一点帮助.我会尽量以 ...

  6. 基于 react, redux 最佳实践构建的 2048

    前段时间 React license 的问题闹的沸沸扬扬,搞得 React 社区人心惶惶,好在最终 React 团队听取了社区意见把 license 换成了 MIT.不管 React license ...

  7. Node.js建站笔记-使用react和react-router取代Backbone

    斟酌之后,决定在<嗨猫>项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现. react拥有丰富的组件,虽然不如Back ...

  8. 深入理解React(一)JSX与虚拟DOM

    初衷 使用 React 有一段时间了, 一直想找个时间写一个 React 的系列文章.忙里抽闲,完成了第一篇.写这系列文章的初衷是总结这段时间的技术学习,以及给那些想学习 React 的同学们一点帮助 ...

  9. 如何在React中做到jQuery-free

    前言 前些天在订阅的公众号中看到了以前阮一峰老师写过的一篇文章,「如何做到 jQuery-free?」.这篇文章讨论的问题,在今天来看仍不过时,其中的一些点的讨论主要是面向新内核现代浏览器的标准 DO ...

  10. 为什么我们放弃了 Vue?Vue 和 React 深度对比

    我使用 Vue 和 React 已经很长一段时间了,两个框架上实践代码量都在 10 万行以上.不得不说两者都是很 nice 的,帮助开发者减少很多工作量,这类框架是现代化前端开发必备的.然而 Vue ...

最新文章

  1. 【Python基础】Python十大文件骚操作!!
  2. 修改linux文件夹密码忘记,Linux中如何重新获取丢失的密码
  3. LinCode落单的数
  4. php中多重继承,PHP面向对象之多重继承与接口用法
  5. 如何使用HttpContext对象
  6. 将浮点数转换为字符串
  7. web developer tips (56):手动更新JScript的智能感知
  8. 使用ComponentOne C1WebGrid控件
  9. linux tcp 压力测试工具,技术|分布式TCP压力测试工具 tcpcopy
  10. 【学习笔记】C++面向对象高级开发-侯捷
  11. python again_It’s really(wonder)________ to see you here again in Beijing.
  12. The Sandbox 开启 2022 年新征途,Mega City 土地销售来啦
  13. bugku ctf 妹子的陌陌 (想要妹子陌陌号吗? 做题来拿吧)
  14. java计算机毕业设计移动垃圾分类车管理平台源码+系统+mysql数据库+lw文档
  15. 聊天室-界面-curses
  16. 关于python赋值语句下列选项中描述正确的是_关于 Python 语句 P = –P,以下选项中描述正确的是________...
  17. next.js引入图片404问题
  18. 鲁大师9m超级精简版
  19. made for china 柯达的赢利模式的转变
  20. 双主动桥隔离双向DC-DC变换器(四) 软开关解决方案和变体

热门文章

  1. c++编译报错:ld returned 1 exit status
  2. 【ajax】7.请求:请求超时与网络异常处理+取消请求+请求重复发送问题
  3. 计算机函数countifs使用,countifs函数的使用方法
  4. php 和风天气,为博客添加实时天气功能(和风天气、中国气象、心知天气)
  5. Linux系统(三)系统基础扫盲大全
  6. 提升领导力这7个法则,你不得不知道
  7. 大学生面试20个经典问题及回答思路
  8. 网传程序员加班猝死,当事人:我还在写代码
  9. 【朝花夕拾】Android自定义View篇之(十)移动阈值TouchSlop及滑动追踪VelocityTracker...
  10. R3Det: Refined Single-Stage Detector with Feature Refinement for Rotating Object