如何在按钮悬停时使 React <Font Awesome Icon/> 颜色改变?

Posted

技术标签:

【中文标题】如何在按钮悬停时使 React <Font Awesome Icon/> 颜色改变?【英文标题】:How to make React <FontAwesomeIcon/> color changed on button hover? 【发布时间】:2020-07-13 06:26:12 【问题描述】:

我对 React 非常陌生,无法解决这个问题。基本上,我只想在悬停按钮时更改“FontAwesomIcon”标签的颜色,而不是“span”标签内的文本颜色。我也在使用 react-bootstrap。这是我的代码,

<div class="tab">
   <Link to="/dataset-upload">
      <button class="tablinks" onClick=this.handleClick>
            <FontAwesomeIcon icon=faCloudUploadAlt size="lg"/> 
            <span>Dataset Upload</span>
      </button>
  </Link>
</div>

这是 FontAwesomeIcon 的 CSS,

.tab button FontAwesomeIcon:hover
    color: #86BC25;

如果我在 CSS 中用 span 替换 FontAwesomeIcon,它就可以工作。

如果有任何建议或建议,我将不胜感激。

【问题讨论】:

css 呢? 希望这个例子能帮助到codesandbox.io/s/font-awesome-and-react-kpoty @ManirajMurugan,感谢您的快速回答,如果我只将鼠标悬停在图标上,它会完美工作,但在悬停整个 div 时我需要相同的效果。 :) @tabrez,给你codesandbox.io/s/react-simple-contact-list-1xvkn 还添加了您提供的代码作为答案.. 希望我的解决方案对您有所帮助.. @tabrez 我更新了我的answer,如果您也只需将鼠标放在按钮上,它就可以正常工作 【参考方案1】:

您可以在FontAwesomeIcon 组件上使用className 属性。

所以只要写一个css规则:

.tablinks:hover .fa-icon 
  color: red;

然后把这个类交给组件:

<FontAwesomeIcon icon=faCloudUploadAlt size="lg" className="fa-icon" /> 

【讨论】:

【参考方案2】:

既然 CSS 可以做很多事情,我就不加倍了。

但是,如果你想编写没有 styled-components 或其他东西的纯 JSX。

您可以使按钮 mouseOver 事件完全受控:

import React,  useState  from "react";
import "./styles.css";
import  FontAwesomeIcon  from "@fortawesome/react-fontawesome";
import  faCloudUploadAlt  from "@fortawesome/free-solid-svg-icons";

export default function App() 
  const [over, setOver] = useState(false);
  return (
    <div className="App">
      <button
        onMouseOver=() => setOver(true)
        onMouseLeave=() => setOver(false)
      >
        <FontAwesomeIcon
          icon=faCloudUploadAlt
          size="lg"
          style=over ?  color: "red"  : 
        />
        <span>Dataset Upload</span>
      </button>
    </div>
  );

【讨论】:

感谢您的快速回答,如果我只将鼠标悬停在图标上,它会完美运行,但在悬停按钮时我需要相同的效果。 :) 真的吗?使用useState 反应钩子来处理可以使用css 在一行中实现的hover 事件? @tabrez 我真的不建议你使用这种方法 @keikai @tabrez 是的,确实不需要down-vote,但看到这种类型的反应代码作为答案真的很痛苦:/【参考方案3】:

使用CSS可以达到效果,

HTML:className 表示为upload-icon 到父div 并将className 表示为font-uploadFontAwesomeIcon

<div className="tab upload-icon">
 <Link to="/dataset-upload">
   <button className="tablinks" onClick=this.handleClick>
   <FontAwesomeIcon
     icon=faCloudUploadAlt
     size="lg"
     className="font-upload"
      />
    <span>Dataset Upload</span>
    </button>
  </Link>
</div>

CSS: 将鼠标悬停在父 div upload-icon 上时,更改 font-upload 的颜色喜欢,

.upload-icon:hover .font-upload 
  color: green;

Working sandbox

注意:请考虑使用className 而不是class.. Ref Link

【讨论】:

以上是关于如何在按钮悬停时使 React <Font Awesome Icon/> 颜色改变?的主要内容,如果未能解决你的问题,请参考以下文章

角度如何在悬停时使X平滑滚动(自动)

如何使用 jQuery 在单击和鼠标悬停时使可滚动的 div 滚动

如何在悬停而不是单击时制作 Twitter Bootstrap 的“拆分按钮下拉菜单”下拉菜单?

react.js 中的悬停按钮

react.js 中的悬停按钮

如何在单选按钮单击时使按钮无效?