className 还能这么用,你学会了吗

news2024/9/24 1:15:11

抛出问题

className大家都用过吧,用它在react项目中设置样式。它的用法很简单,除了可以设置一个样式外,react中也可以使用className引入多个类样式。

这次在写项目的时候,碰到一个非常小但是当时却一直解决不了的问题。后面在复盘的时候将它解决了。问题大致是这样的:

有两个活动页,每个活动页上都有一个活动规则图标来弹出活动规则,活动规则图标距离顶部会有一个值。现在问题就是这个活动规则在这两个活动页距离顶部的这个值是不一样的,但是我已经将这个活动规则图标做成了组件,并在这两个活动页里都调用了它,从而导致两个页面的样式会相同。如下图所示:

解决问题

这个问题不算很大,但是属于细节问题。就和我的组长所说的一样,一个项目应该要做到先完成再完美。所以我当时的解决方法是再写一个活动规则组件,只是将距离顶部的值做出修改即可。效果确实是达到了,不过在最后复盘代码的时候,组长注意到了这两个组件,并开始询问我为什么这样做。

组长:Rule_1Rule_2这两个组件是什么意思,我看它们没有很大的区别呀。

我便简单说了一下缘由。

组长接着说:你忘了组件是什么吗?一个CSS样式值不同就大费周章地新增一个组件,这岂不是太浪费了。再去想想其他方案。

通过这一番谈话我想起了组件化思想的运用,发现之前解决的这个小问题解决的并不够好。于是,我就带着组件化思想又来重新完善它。

我重新写了一个demo代码,将主要内容和问题在demo代码中体现出来。下面是原版活动规则组件demo代码,之后的代码都是基于demo代码完成的

import React from "react";
import "./index.css";
const Header = ({ onClick }) => {return (<><div className="container_hd"><divclassName='affix'onClick={onClick}></div></div></>);
};
export default Header; 

组件化思想

我自己问自己:既然已经写好了一个活动规则组件,为什么仅仅因为一个样式值的不同而去新增一个功能一样的组件?很显然,这种方法是最笨的方案。既然是组件,那就应该要有复用性,或者说只需在原有的基础上稍加改动就可达到效果。

这是样式的问题,因此要从根本上解决问题。单纯地修改 CSS 样式肯定不行,因为两个页面两个不同的样式。

className 运用

className 就不用多介绍了,经常能使用,咱们直接来看如何解决问题。在这里我定义了一个 Value 值,用来区分是在哪个页面的,比如分别有提交页和成功页,我在成功页设置一个 Value 值,,然后将 Value 值传入到活动规则组件,那么在活动规则组件里只需要判断 Value 值是否等于成功页的 Value 值即可。在 className 处做一个三元判断,如下所示:

className={`affix_${Value === "0" ? "main" : "submit"}`} 

相当于如果Value等于0的时候类名为affix_main,否则为affix_submit。最后再css将样式完善即可。完整代码可以参考如下:

  • 成功页组件
import Header from "./components/Header";

const Success = () => {const Value = "0";return (<div style={{ backgroundColor: "purple", width: "375px", height: "670px" }}><Header Value={Value}></Header></div>);
};

export default Success; 
  • 活动规则组件
import React from "react";
import "./index.css";
const Header = ({ onClick, Value }) => {return (<><div className="container_hd"><divclassName={`affix_${Value === "0" ? "main" : "submit"}`}onClick={onClick}></div></div></>);
};
export default Header; 
  • 活动规则组件样式
.container_hd {width: 100%;
}
.affix_main {position: absolute;top: 32px;right: -21px;z-index: 9;width: 84px;height: 26px;background: url('./assets/rule.png');background-size: contain;background-repeat: no-repeat;
}
.affix_submit {position: absolute;top: 12px;right: -21px;z-index: 9;width: 84px;height: 26px;background: url('./assets/rule.png');background-size: contain;background-repeat: no-repeat;
} 

通过对比效果图可以看出,两者的效果确实发生变化。完成之后,我心里在想:为什么当时就没想出这个简单易行的方案呢?动态判断并设置类名,至少比最开始的新增一个组件的方法高级多了。

总结问题

对于这个问题的解决就这样告一段落了,虽然看起来比较简单(一个动态设置类名),但是通过这个className的灵活使用,让我对className的用法有了更进一步的掌握,也不得不感叹组件化思想的广泛运用,这里最大程度地将组件化思想通过className 发挥出来。

因此,希望通过这个问题,来学会className的灵活用法,并理解好组件化思想。当然如果大家还有更好的解决方案的话,欢迎在评论区告诉我。

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基础语法25-进程理论

一、简介 服务器为了能够同时为多个客户端服务,则需要能够同时处理多个网络连接的方法。python提供了3个主要的方法来实现这个目的,multiprocessing、threading和异步I/O。 今天主要说一下进程multiprocessing。 multiprocessing是一个和threading(多线程)类似的库,这个多…

【MVC和三层架构】联系、区别以及简单实践

MVC架构模式MVC架构模式概述引入MVCMVC和三层架构之间的联系和区别三层架构与MVC联系和区别银行转账小项目实践MVC架构模式概述 MVC架构模式是软件架构中的一个架构模式。 M&#xff08;Model&#xff1a;数据/业务&#xff09; V&#xff08;View&#xff1a;视图/展示&#x…

深入xJavaFxTool的插件开发模式

背景 时光华丽丽的来到了2023年&#xff0c;首先在这里祝大家新年快乐&#xff0c;希望大家在新的一年里都能心想事成&#xff0c;万事如意&#xff0c;最重要的是身体健康。过去的2022年里&#xff0c;大家一定都是收获满满。不论是技术的&#xff0c;家庭的&#xff0c;事业的…

【C++】map 与 set 的介绍与使用

目录 一、关联式容器 二、键值对 三、set 3.1 set 的介绍 3.2 set 的使用 3.3. set 的使用举例 四、map 4.1 map的介绍 3.2 map 的使用 4.3 map的使用举例 五、经典练习题 1.set的使用 2.map的使用 思路一(稳定排序)&#xff1a; 思路二(priority_queue)&#x…

LabVIEW使用共享变量在两台计算机之间进行通信

LabVIEW使用共享变量在两台计算机之间进行通信 需要选择一台计算机作为服务器并发布变量&#xff0c;而另一台计算机作为客户端接收变量。然后&#xff0c;按照以下步骤设置服务器和客户端计算机。 服务器机器&#xff1a; 创建LabVIEW项目并通过右键单击“我的电脑”并选择…

opencv-python常用函数解析及参数介绍(六)——图像梯度

图像梯度前言Sobel算子算子的定义Sobelx效果演示Sobely效果演示完整轮廓直接计算复杂图片的轮廓Scharr算子与laplacian算子scharr算子的定义laplacian算子定义三种算子的效果对比结尾前言 前面的文章中我们介绍了用膨胀和腐蚀得到了图像轮廓&#xff0c;图像梯度也是一种可以得…

五年六次

今天是 2022 年的最后一天&#xff0c;可算等来了。讽刺的是&#xff0c;就在昨天&#xff0c;小号写了篇文章&#xff0c;啥主题就不说了&#xff0c;然后晚上文章被删了&#xff0c;账号居然也被封了。2022 全年虽然我写过很多文章都被和谐了&#xff0c;但是最后一天喜提封号…

二、Django

Django 提示&#xff1a;本文根据b站黑马python课整理 链接指引 > 黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》 文章目录DjangoMVT图解项目准备1.创建项目2.创建应用3.更换python解释器4.安装应用5.本地化6.项目中匹配urls7.应用中匹配urls.py8.准备视图…

Tensorflow游乐场 在线可视化

playground.tensorflow.org Tensorflow游乐场 Tensorflow游乐场提供了一个在线可视化AI训练。A Neural Network Playgroundhttp://playground.tensorflow.org/ Tensorflow游乐场 是干啥的呢 给一堆点分出蓝色部分和橙色部分。也就是二分类。 它提供了4种数据来训练 每种数据…

致敬客户、致敬行业,知道创宇2022“宇”你并肩前行!

2022回首2022&#xff0c;一幅数字化、智能化升级的壮阔云图徐徐展开&#xff0c;顺势催生出安全技术的全新变革……这一年&#xff0c;中国网络安全企业代表——知道创宇&#xff0c;持续从技术创新、安全服务、行业融合等方面深入网络安全产业升级。我们坚守攻防博弈战场、纵…

burp suite爆破sqli-labs的 less-5

一. 使用proxy抓包&#xff0c;具体数据包如下图&#xff1a; 二. 鼠标右键&#xff0c;将其发送到 intruder中&#xff0c;具体如下图&#xff1a; 三.选择下图选项卡&#xff1a; 1.默认为sniper模式&#xff0c;即如果有多个变量&#xff0c;对每个变量依次进行破解&#xf…

【 shell 编程 】第3篇 循环

循环 文章目录循环一、for 循环1.for 语法结构二、while、until 循环1.while 语法结构2.until 语法结构三、expect一、for 循环 1.for 语法结构 for 变量名 [ in 取值列表 ] do 循环体 done例子1 需求&#xff1a;自动循环创建10个用户 #&#xff01;/bin/bash read -p &quo…

【C++常用容器】STL基础语法学习set容器

目录 ●set构造和赋值 ●set大小和交换 ●set插入和删除 ●set查找和统计 ●set排序&#xff08;改变其排序规则&#xff0c;仿函数的运用&#xff09; ●set和multiset 1.对组&#xff08;pair&#xff09;的创建 2.set的验证&#xff08;不可以重复插入数据&#xff…

《QDebug 2022年12月》

一、Qt Widgets 问题交流 二、Qt Quick 问题交流 1、在 C 中关联 QQuickWindow 的 closing 信号提示 "使用了未定义类型QQuickCloseEvent" 因为 closing 信号中的参数类型是 private 模块中定义的&#xff0c;但是通过第二句提示我们知道找到了完整定义才能使用 Q_…

安装并配置uwsgi(1)

今天分享的主题是安装并配置uwsgi。 假设我们‍‍腾讯云主机里面的整个后端的源码&#xff0c;包括运行环境都已经没有问题了&#xff0c; 我们要把这个给挂到我们的 uwsgi 的服务器上&#xff0c; 因为这个服务器它支持 uwsgi 的协议&#xff0c;它能够跟我们的Django的进行一…

Shell——echo、printf及彩色打印

文章目录printfprintf格式常用的转义字符echoecho打印的格式echo打印的三种方式echo支持的转义字符关于打印叹号&#xff08;!&#xff09;彩色输出printf printf格式 printf “格式化字符串” 变量 printf的使用方法与C语言一样&#xff0c;并且不需要括号和逗号进行分隔&…

【自学Python】Python诞生

Python诞生 Python诞生教程 1989 年的圣诞节期间&#xff0c;吉多范罗苏姆为了在阿姆斯特丹打发时间&#xff0c;决心开发一个新的解释程序&#xff0c;作为 ABC 语言的一种继承。 ABC 语言是由吉多参加设计的一种教学语言&#xff0c;就吉多本人看来&#xff0c;ABC 这种语…

如何使用 Java Stream API ,一行代码将 List 转换为 Map 类型

文章目录一句话场景语法测试关键语句截图Source Code控制台输出一句话 List<User> --> Map<User对象中欲作为key的字段的类型, User> List<User> userList getUserList(); Map<Integer, User> idAndUserMap userList.stream().collect(Collecto…

2022朝花夕拾-持续快速成长

2022年又过去了&#xff0c;学业繁忙好久没和大家聊天了。2020年终总结2020朝花夕拾-不务正业的大学生做了什么比赛&#xff1f;和2021年终总结2021朝花夕拾-我在校搞副业实现经济独立在此&#xff0c;幸好去年立了年度目标。如今在回忆这一年的收获时&#xff0c;也可以一项项…

通过SQLserver执行系统命令

前言 咋说呢&#xff0c;就是把&#xff0c;我最近找工作然后库库投校招的简历&#xff0c;然后呢&#xff0c;我接到了一个青藤云的笔试机会&#xff0c;哇&#xff01;我激动的不行&#xff0c;然后我什么都没有准备的上线进行一波答题&#xff0c;答完总结下来&#xff0c;…