React项目中className运用及问题解决

 更新时间:2022年12月15日 09:18:10   作者:一条会coding的Shark  
这篇文章主要为大家介绍了React项目中className运用及问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

抛出问题

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">
        <div
          className='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">
        <div
          className={`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 的灵活用法,并理解好组件化思想。

以上就是React项目中className运用及问题解决的详细内容,更多关于React项目className运用的资料请关注脚本之家其它相关文章!

相关文章

  • React使用useEffect解决setState副作用详解

    React使用useEffect解决setState副作用详解

    这篇文章主要为大家介绍了React使用useEffect解决setState副作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • React语法中设置TS校验规则的步骤详解

    React语法中设置TS校验规则的步骤详解

    这篇文章主要给大家介绍了React语法中如何设置TS校验规则,文中有详细的代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-10-10
  • React中如何处理承诺demo

    React中如何处理承诺demo

    这篇文章主要为大家介绍了React中如何处理承诺demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • React实现合成事件的源码分析

    React实现合成事件的源码分析

    React 中的事件,是对原生事件的封装,叫做合成事件。抽象出一层合成事件,是为了做兼容,抹平不同浏览器之间的差异。本文将从事件绑定和事件触发角度,带大家解读下源码,感兴趣的可以了解一下
    2022-12-12
  • React Hooks 实现的中文输入组件

    React Hooks 实现的中文输入组件

    这篇文章主要为大家介绍了React Hooks实现的中文输入组件示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • react中使用redux-persist做持久化储存的过程记录

    react中使用redux-persist做持久化储存的过程记录

    这篇文章主要介绍了react中使用redux-persist做持久化储存的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • React hook超详细教程

    React hook超详细教程

    Hook是React16.8的新增特性。它可以让你在不编写class的情况下使用state以及其他的React特性,这篇文章主要介绍了React hook的使用
    2022-10-10
  • React中实现编辑框自动获取焦点与失焦更新功能

    React中实现编辑框自动获取焦点与失焦更新功能

    在React应用中,编辑框的焦点控制和数据回填是一个常见需求,本文将介绍如何使用useRef和useEffect钩子,在组件中实现输入框自动获取焦点及失焦后更新数据的功能,文中通过代码示例给大家讲解的非常详细,需要的朋友可以参考下
    2024-01-01
  • React Native项目中使用Lottie动画的方法

    React Native项目中使用Lottie动画的方法

    这篇文章主要介绍了React Native 实现Lottie动画的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • React高阶组件使用教程详解

    React高阶组件使用教程详解

    高阶组件就是接受一个组件作为参数并返回一个新组件(功能增强的组件)的函数。这里需要注意高阶组件是一个函数,并不是组件,这一点一定要注意,本文给大家分享React 高阶组件HOC使用小结,一起看看吧
    2022-12-12

最新评论