Reactjs - 在悬停时渲染从数组渲染的列表项的单个图标

2024-02-20

我有这种从对象数组渲染的卡片。

父组件:

[{foo: 'bar', baz: [{ name: string, path: string: '/'}]

state = {isHovering: false}

handleMouseHover = () => {
    const { isHovering } = this.state;
    this.setState({ isHovering: !isHovering });
}

;

我正在传递handleMouseHover() and isHovering作为子组件的道具。

结果是这样的:

子组件

<LinkContainer
  onMouseEnter={handleMouseHover}
  onMouseLeave={handleMouseHover}
  className="linkContainer"
>

 {isHovering && (
   <FontAwesomeIcon
     icon="copy"
     className="copyIcon"
     onClick={copyToClipboard}
   />
 )}

结果是 4 张卡片,其中包含 3 个链接。每次我将鼠标悬停在链接上时,我都希望显示“复制到剪贴板”图标。然而,当我将鼠标悬停在它设置的任何项目上时isHovering to true从而使所有图标可见。理想情况下,我只希望我将鼠标悬停在其上的链接的图标可见。有人可以帮助我找出更好的解决方案或改进我已经编写的代码吗?

非常感激!


您可以将对象保留在您的状态中,而不是布尔值,该对象有一个键,指示以该特定键作为索引的对象是否悬停。

Example

class App extends React.Component {
  state = {
    arr: [{ text: "foo" }, { text: "bar" }],
    isHovered: {}
  };

  handleMouseEnter = index => {
    this.setState(prevState => {
      return { isHovered: { ...prevState.isHovered, [index]: true } };
    });
  };

  handleMouseLeave = index => {
    this.setState(prevState => {
      return { isHovered: { ...prevState.isHovered, [index]: false } };
    });
  };

  render() {
    const { arr, isHovered } = this.state;

    return (
      <div>
        {arr.map((el, index) => (
          <Child
            onMouseEnter={() => this.handleMouseEnter(index)}
            onMouseLeave={() => this.handleMouseLeave(index)}
            text={el.text}
            isHovering={isHovered[index]}
            key={index}
          />
        ))}
      </div>
    );
  }
}

function Child({ onMouseEnter, onMouseLeave, text, isHovering }) {
  return (
    <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
      {text} {isHovering && " (hovering!)"}
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

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

Reactjs - 在悬停时渲染从数组渲染的列表项的单个图标 的相关文章

随机推荐

  • UDP 数据报中发送的消息未经过净化?

    我的代码如下 一切都按照我想要的方式进行 但是当我的消息收到时 它们的末尾有很多框 有点像这样 消息 你好 如何才能让接收和打印的内容仅为 Message hello 我非常感谢任何帮助 import java io import java
  • 如何使用摄影测量或 LiDAR 创建 3D 扫描 ios 应用程序?

    我想使用摄影测量或 LiDAR 创建自己的 3D 扫描应用程序 我希望能够精确地扫描小物体 您能指导我从头开始创建这样的应用程序吗 我尝试搜索如何使用统一来做到这一点 但我找不到它 我想要一个能够进行 3D 扫描的 IOS 应用程序 当谈到
  • 如何在 Excel 宏中使用 JavaScript?

    Google 托管了一个非常酷的 diff 类 http code google com p google diff match patch http code google com p google diff match patch 我之
  • JNA 如何在要传递到本机库的结构中填充结构指针字段?

    我需要将 JNA 结构传递到包含结构指针字段 可能包含零个或多个结构 的本机层 这是 父 结构 public class VkRenderPassCreateInfo extends Structure public int attachm
  • 在 Symfony 中,如何在开发环境中要求 http,在生产环境中要求 https?

    在生产中 我有一组需要 SSL 的路由 但这不应该是开发的要求 我以为我可以简单地覆盖我的路线routing dev yml但这似乎不起作用 当导航到任何路线时 它会强制使用 https 我的设置 应用程序 配置 routing dev y
  • 比较器最佳实践

    如果我实现自定义比较器 重写是否被认为是好的做法equals除了compare 此外 是否有一份明确的合同Comparator Comparator合约定义在它的javadoc中 http docs oracle com javase 7
  • 如何替换Python字符串中的占位符

    如果我在Python中有一个这样的字符串 我该如何填充占位符 s uri1 s file1 txt md5 s uri2 s file2 txt md5 s uri3 s file3 txt md5 s The uri然而 将保持不变 md
  • 为什么我无法使用 NodeJS 解密使用 openssl 加密的文件?

    我使用命令行加密了一个文件 openssl aes 256 cbc in tmp text txt out tmp text crypt 然后我尝试使用以下 JavaScript 代码对其进行解密 crypto require crypto
  • Rails 3 在所有表单上去除 before_validation 的空格

    我对 Rails 比较陌生 有点惊讶这不是一种可配置的行为 至少我还没有找到一个 我本以为 99 的表单都会受益于修剪所有表单中的空白string text领域 我猜我错了 无论如何 我正在寻找一种 DRY 方法来从 Rails 3 应用程
  • 使用 Seaborn 和 Matplotlib 对齐热图和线图的共享子图中的 x 轴刻度

    绘制一个热图和线图使用具有共享 x 轴的 Seaborn 热图的刻度被放置在热图条的中间 因此 底部线图将继承热图刻度位置和标签 而不反映真实数据 因为线图刻度应从零开始 换句话说 我需要将两个图的刻度移动到从 x 轴原点开始 最佳 或者将
  • 在子进程中使用信号

    我想创建一个简单的程序 它使用 fork 并创建一个子进程 该子进程使用暂停正在等待 我希望这个子进程在从父进程收到特定信号后启动 我写的代码 include
  • 从第三方网站 POST 后丢失会话数据

    我有一个 Laravel 网站 它重定向到支付提供商 外部第三方网站 当用户完成付款后 他们会通过 POST 请求重定向回我的网站 我遇到的问题是 当用户返回确认页面时 他们的会话会丢失 我想知道这是否是 PHP 的普遍行为 但它似乎是 L
  • Android Studio 3 中的“活动管理器状态”在哪里?

    Android studio 2 x 中有一个非常方便的调试功能 但目前 3 x 中没有 它有点隐藏在用户界面中 然后它会提示详细的活动管理器状态 我知道 我可以通过以下方式获取该输出adb shell dumpsys activity t
  • Google Data Studio:如何计算特定事件的数量

    我知道以前有人问过类似的问题 但我没有找到答案 例子在这里 https support google com datastudio thread 22779471 hl en 另一个例子 https stackoverflow com qu
  • 在 Ubuntu 16.04 上安装 Oracle Datamodeler

    我正在我的 Ubuntu 16 04 工作站上设置 Oracle 开发环境 安装 Oracle 12c 是一个挑战 但有几个非常有用的教程让我走上了正轨 下列的迪兹韦尔的 https www dizwell com wordpress te
  • 从 Outlook 获取收件箱

    我在 Outlook 2010 中配置了两个 Exchange 帐户 但是我无法找到如何访问第二个帐户的收件箱 Session GetDefaultFolder 总是返回第一个 甚至枚举 Session Accounts 找到正确的帐户并调
  • for 循环缺少初始化

    我见过 for and for s 0 s 怎么就这样空白了 谢谢 The for声明的工作原理如下 for initialization test condition update 这三个中的任何一个或全部都可以省略 留空 所以 for
  • Eclipse源代码下载[已关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在新的 Eclipse 中 我们具有右键单击 XSD 并从中生成 XML 的功能 有人可以指导我在哪里可以获得 Eclipse 此功能的源代码吗 我猜
  • 如何动态更改按钮模板WPF

    我怎样才能改变一个Button模板动态 我有一个ComboBox通过更改他选择的值 我想更改Button Template 这就是我一直在努力做的事情
  • Reactjs - 在悬停时渲染从数组渲染的列表项的单个图标

    我有这种从对象数组渲染的卡片 父组件 foo bar baz name string path string state isHovering false handleMouseHover gt const isHovering this