谈谈react操作onMouseEnter、onMouseLeave结合css里的hover

2023-11-16

react对于每个html元素都添加了很多事件处理函数,这些事件网上一搜就都出来了,这里简单说下在react中利用js进行操作类似于css里的hover所使用的事件。
比如这样一个需求,有以下3个div:
<div class="a abc">a</div>
<div class="b abc">b</div>
<div class="c abc">c</div>

网上很多例子只是简单说了下一个组件是如何操作类似于:hover选择器,没错就是使用onMouseEnter和onMouseLeave,那么现在我要实现这样一个效果:
1. 鼠标不在这三个div上的时候,这个三个div里的字体显示红色
2. 鼠标放在class为a的组件上的时候,它里面的字体颜色不变,其他的div变成绿色

也许是我以前写前端的时候用习惯了JQuery,处处都是dom操作,现在使用react的时候,一时之间转不过来弯,就好像从面向过程编程过度到面向对象编程一样,我想了一下,想想react改变页面的内容是根据状态,于是我利用onMouseEnter和onMouseLeave事件来动态改变状态hover,然后根据hover的状态值去给这三个div分别添加一个class,这里的class样式在css文本中要写在其他class的下面,因为css是自上而下的。

我的代码如下:
reactjs中的部分代码

construction(props){
    super(props);
    this.state={
        hover: false,
    }
    this.onMouseEnter = this.onMouseEnter.bind(this);
    this.onMouseLeave = this.onMouseLeave.bind(this);
}

onMouseEnter(){
    this.setState({
        hover: true,
    });
}

onMouseLeave(){
    this.setState({
        hover: false,
    })
}

render(){
    return <div>
                <div className={style.a + ' ' + style.abc + ' ' + (this.state.hover?style.aHover:'')}>a</div>
                <div className={style.b + ' ' + style.abc + ' ' + (this.state.hover?style.bHover:'')}>b</div>
                <div className={style.c + ' ' + style.abc + ' ' + (this.state.hover?style.b=cHover:'')}>c</div>
            </div>;
}

css的相关样式

.abc{
    //公共的样式
    color: red;
}

.a{
}

.b{
}

.c{
}
//写在其他class的样式表的下面
.aHover,.bHover,.cHover{
    color: green;
}

.aHover:hover,.bHover:hover,.cHover:hover{
    color: red;
}

也许有的人会想到用css中的+选择器,比如:.abc:hover + .abc{},是的,如果只是像这里写的需求的话是可以实现,如果换一下,我鼠标放在b上,b显示红色,其他显示绿色,那么+选择器就无力了,因为css是自上而下,不可逆的,说是+是兄弟级选择器,我看也就是弟弟级选择器,它只能定位到你当前标签后面同级的标签元素。

注:因为是react,所以不建议使用js对dom进行直接操作、利用css的expression

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谈谈react操作onMouseEnter、onMouseLeave结合css里的hover 的相关文章

  • 让右侧的 Div 填满所有可用空间

    我想创建两个并排的 div 但我希望左侧的 div 为 300px 右侧的 div 占据屏幕上的剩余部分 这怎么可能呢 谢谢 最直接的 我会说正确的 方法是使用display table wrapper display table widt
  • CSS 中的圆帽下划线

    你能用 CSS 制作圆形下划线 如上图所示 吗 如何 有没有办法做到这一点border bottom border radius相反 会产生这种时尚的效果 编辑 我误解了皮克想要什么 但这应该有效 test font size 50px b
  • CSS淡入淡出动画延迟计时

    我正在尝试使用 css3 创建幻灯片效果 我有三张图像 我需要将它们相互淡入淡出 每次转换需要持续 3 秒 第一张图像显示 3 秒 然后淡入第二张图像 第三张图像同样显示 我不确定如何计算关键帧的百分比 Codepen http codep
  • 无法将 event.target 转换为字符串

    为了识别用户单击的元素 我尝试使用事件对象target document click function e var str e target toString console log str if str indexOf some clas
  • Objective-C / Cocoa Touch 中的 HTML 字符解码

    首先 我发现了这个 https stackoverflow com questions 659602 objective c html escape unescapeObjective C HTML 转义 unescape https st
  • 删除添加到购物车通知并更改 Woocommerce 中的“添加到购物车”按钮

    How to remove has been added to your cart text from shopping cart page and how to replace quantity and add to cart butto
  • 如何在 PHP 中解析和处理 HTML/XML?

    如何解析 HTML XML 并从中提取信息 Answer recommended by PHP collectives php Collective 原生 XML 扩展 我更喜欢使用其中之一原生 XML 扩展 https php net m
  • 如何在跨度上使用 CSS3 变换? [复制]

    这个问题在这里已经有答案了 我有一个行内元素 a span 嵌套在 h1 标签 我申请了一个转换财产给h1 skew所以它看起来像一个平行四边形 我需要转换 the span 标记以 矫正 它及其文本 但这似乎只适用于 IE Here is
  • 如何使用.clearfix类?

    我想我误解了这个概念 clearfix班级 也许有人可以帮助我 我正在寻找一种使用方法float and clear不会弄乱我的标记 所以我想 那就是那里 clearfix可以用于 在空的 H5BP 项目内部 我的标记如下所示 div di
  • VideoJs 在 Firefox 中的 Flash 回退问题

    我尝试将 videoJs 添加到我的网站来播放 MP4 文件 所有这些在 Chrome 中都能完美运行 但当我转到 Firefox 不支持 MP4 文件 时 Flash 播放器停留在黑屏上 按钮不执行任何操作 简单的问题 为什么 我不明白
  • 如何从模板脚本访问 AngularJS 变量

    我的控制器 scope totals totals 我的模板 按 html 注入的预期工作 totals 但我需要的是访问变量totals在模板的脚本中 如下所示 我试过了 scope totals totals totals 等 均无济于
  • 如何在 div 标签上添加带边框的三角形

    我有一个 div 标签 我想在它上面添加一个小三角形 注意 我希望我的 div 标签具有某种颜色的边框 以及另一种颜色的 div 主体 假设我的 div 背景为白色 边框为蓝色 请看这个 http fiddle jshell net pau
  • 绝对位置在固定位置内不起作用

    div div div div Both main and inner集装箱取走position fixed 内胆的制作方法position absolute和主容器position fixed 你需要定义top right bottom
  • font-face 声明中还需要 eot、ttf 和 svg 吗?

    到目前为止 我一直使用 Paul Irish 的防弹字体语法 http www paulirish com 2009 bulletproof font face implementation syntax 但我只是在寻找对 woff 和 w
  • 使用 CSS 过渡动画 max-height

    我想创建一个仅由类名驱动的展开 折叠动画 javascript 用于切换类名 我正在上一堂课max height 4em overflow hidden 和另一个max height 255em 我也尝试过这个值none 根本没有动画 这个
  • CSS:悬停在多个 div 上时显示样式

    我有 2 个不同尺寸的 div 一个放在另一个上面 所以有一个共同的交叉区域 这两个 div 都有 CSS hover 规则集 如果我将鼠标悬停在每个 div 上 则规则适用 但是 如果我移过交叉区域 则只会激活顶部 div 悬停 当鼠标悬
  • 如何在 jQuery 中使用其中心作为参考点来缩小 div?

    我有以下 div div style margin left 0px height 100px width 100px background color red div 我想使用 jQueryanimate 将 div 缩小到其大小的一半
  • -moz-变换 z-index 错误?

    In 这个测试用例 http jsfiddle net MZ7PX 没有 moz transform rotate 31deg 黄色框是可见的 它应该是可见的 但是如果我添加这个 尽管有一个黄色框是不可见的z index of 999 Wh
  • 当属性值在 HTML5 中可以保持不带引号时

    HTML5 中什么时候属性值可以保持不带引号 HTML4 01 是一个 SGML 应用程序 因此 在 HTML4 中 如果值中使用的唯一字符是当前声明为名称字符的字符 字母数字字符 句号 则可以省略引号 好吧 来自 W3C 工作草案 201
  • 如何在禁用按钮上启用 Bootstrap 工具提示?

    我需要在禁用的按钮上显示工具提示 并在启用的按钮上删除它 目前 它的工作原理是相反的 扭转这种行为的最佳方法是什么 rel tooltip tooltip

随机推荐

  • CSS盒模型自适应布局——calc与box-sizing

    CSS盒模型 1 CSS中盒模型分为两种 第一种是W3C的标准模型 即盒子的宽高等于内容的宽高 盒子的padding和border不计算在内 第二种是IE的传统模型 IE6以下 不含IE6 称为怪异模式或者QuirksMode 即盒子的宽高
  • sklearn中的LASSO

    LASSO import numpy as np import matplotlib pyplot as plt np random seed 42 x np random uniform 3 0 3 0 size 100 X x resh
  • pytorch 笔记: Swin-Transformer 代码

    理论部分 论文笔记 Swin Transformer Hierarchical Vision Transformer using Shifted Windows UQI LIUWJ的博客 CSDN博客 源码部分 Swin Transform
  • Java占位符总结

    文章目录 实现方式 方式一 jdk1 8 java text MessageFormat 方式二 Log4j javaorg slf4j helpers MessageFormatter 方式三 commons text org apach
  • linux下搭建goprotobuf

    linux下搭建goprotobuf 1 搭建go语言环境 参考官网 http golang org doc install 主要是设置好GO PATH这个变量 这个就是你的工作环境目录 可以使用go env来查询设置好了没 2 搭建pro
  • python中列表概念,Python基本数据类型——List(列表)

    1 序列 1 1 序列的基本概念 序列是Python中最基本的一种数据结构 序列用于保存一组有序的数据 所有的数据在序列当中都有一个唯一的位置 索引 并且序列中的数据会按照添加的顺序来分配索引 数据结构是指计算机中数据存储的方式 1 2 序
  • Pinpoint--基础--04--请求追踪和字节码插装

    Pinpoint 基础 04 请求追踪和字节码插装 备注 背景 英文原文 https naver github io pinpoint 1 8 4 techdetail html Dapper原文 https ai google resea
  • 00后卷王自述,我真的很卷吗?

    前段时间我去面试了一个软件测试公司 成功拿到了offer 薪资也从10k涨到了18k 对于工作都还没两年的我来说 还是比较满意的 毕竟有些工作了3到4年的可能还没有我的高 在公司一段时间后大家都说我是卷王 其实我也没办法 自己家里条件不是很
  • Pytorch ----注意力机制与自注意力机制的代码详解与使用

    注意力机制的核心重点就是让网络关注到它更需要关注的地方 当我们使用卷积神经网络去处理图片的时候 我们会更希望卷积神经网络去注意应该注意的地方 而不是什么都关注 我们不可能手动去调节需要注意的地方 这个时候 如何让卷积神经网络去自适应的注意重
  • Java基础6--对象和类

    Java基础6 对象和类 文章目录 Java基础6 对象和类 概念 Java中的对象 Java 中的类 构造方法 创建对象 访问实例变量和方法 Java 内部类 非静态内部类 静态内部类 从内部类访问外部类成员 import 语句 概念 对
  • 异步编程CompletableFuture系列3 接口合并

    直接上代码 import java util concurrent CompletableFuture import java util concurrent TimeUnit public class Test3 public stati
  • 没有找到MSVCR90D.DLL的两种解决方法

    1 没有找到MSVCR90D DLL的简单解决方法之一 在VS2005 2008下写C C 程序时 偶然会出现这样的错误 这样的错误一般会出现在第一次运行项目时 或重装VS后 这里提供一种简单的解决办法 希望对初学者有用 打开项目的属性页
  • 【CCPC-2019】【江西省赛】【霖行】J-Worker

    CCPC 2019 江西省赛 霖行 J Worker 题目 Avin meets a rich customer today He will earn 1 million dollars if he can solve a hard pro
  • python中用pickle打开文件报错:EOFError: Ran out of input

    用pickle dump 保存文件之后如果不关闭文件就会出现此错误 f open test pkl wb pickle dump dict f f close 后面添加关闭就不会报错
  • JAVA - 判断两个浮点数相等

    背景知识 float型和double型是JAVA的基本类型 用于浮点数表示 在JAVA中float型占4个字节32位 double型占8个字节64位 一般比较适合用于工程测量计算中 其在内存里的存储结构如下 float型 符号位 1 bit
  • 基于梯度下降算法求解线性回归

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 01 线性回归 Linear Regression 梯度下降算法在机器学习方法分类中属于监督学习 利用它可以求解线性回归问题 计算一组二维数据之间的线性关系 假设有一组数
  • Solidworks2022-2-软件安装步骤

    Solidworks2022软件安装步骤 1 先确定你的系统是否已经安装了 net 3 5 和 net 4 0 net 3 5 和 net 4 0查看方法 如果 没有或缺少 根据第二张图进行下载或增加一下 2 断开网络连接 关闭保护设置 3
  • Linux_centos7_vi/vim程序编辑器_(6)_(bird_bro)

    参考资料 https studylib net doc 11479665 vi vim graphical cheat sheet q j
  • noj.26 二叉排序树的合并

    题目描述 分析 1 先序 创建二叉排序树 2 在二叉排序树中插入一个值 3 n 大于根节点在右子树中插入 4 n 小于根节点在左子树中插入 5 合并排序二叉树 6 中序输出合并后的排序二叉树 完整代码 include
  • 谈谈react操作onMouseEnter、onMouseLeave结合css里的hover

    react对于每个html元素都添加了很多事件处理函数 这些事件网上一搜就都出来了 这里简单说下在react中利用js进行操作类似于css里的hover所使用的事件 比如这样一个需求 有以下3个div div class a abc a d