【问题标题】:multiple divs with useRef带有 useRef 的多个 div
【发布时间】:2021-06-18 08:29:12
【问题描述】:

假设我有多个 div,并且每个 div 的操作 onClick 都是相同的。 如何获取已点击的 Ref?

我已经尝试过,但我很挣扎。

import React, { useRef } from "react";
import "./style.css";

export default function App() {
  const Ref1 = useRef();
  const Ref2 = useRef();
  const Ref3 = useRef();

  const Namee = event => {
    let temp = event.currentTarget.id;

    temp == "Ref1" ? (Ref1.current.style.display = "none") : null;
    temp == "Ref2" ? (Ref2.current.style.display = "none") : null;
    temp == "Ref3" ? (Ref3.current.style.display = "none") : null;
  };
  return (
    <>
      <div id="Ref1" ref={Ref1} onClick={Namee} className="icon-wrapper">
        jjjjj
      </div>
      <div id="Ref2" ref={Ref2} onClick={Namee} className="icon-wrapper">
        jeee
      </div>
      <div id="Ref3" ref={Ref3} onClick={Namee} className="icon-wrapper">
        jeee
      </div>
    </>
  );
}

https://stackblitz.com/edit/react-aucoxt

【问题讨论】:

  • 对不起,我不能投票给你。谢谢老哥

标签: reactjs use-ref


【解决方案1】:

您可以将 ref 传递给 onClick 函数:

import React, { useRef } from "react";
import "./style.css";

export default function App() {
  const Ref1 = useRef();
  const Ref2 = useRef();
  const Ref3 = useRef();

  const Namee = (ref) => ref.current.style.display = "none";

  return (
    <>
      <div id="Ref1" ref={Ref1} onClick={() => Namee(Ref1)} className="icon-wrapper">
        jjjjj
      </div>
      <div id="Ref2" ref={Ref2} onClick={() => Namee(Ref2)} className="icon-wrapper">
        jeee
      </div>
      <div id="Ref3" ref={Ref3} onClick={() => Namee(Ref3)} className="icon-wrapper">
        jeeea
      </div>
    </>
  );
}

编辑:根据您想要实现的目标,您可能还可以使用 useState 挂钩跟踪您的数据,然后对其进行迭代以呈现 div,而不是从一开始就拥有 3 个 div,每个 div 都有一个 ref。 您可以拥有一个对象数组,其键值对“show”为真或假。然后,如果您知道我的意思,您可以根据它渲染您的 div。但我不完全确定你在做什么,所以这可能对你的用例没有意义。

【讨论】:

  • 谢谢伙计。是的,我基本上是想做一些打开onclick的下拉框,然后关闭onclick。所以你的建议很相关。感谢您尽快回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 2017-03-16
  • 2016-05-10
相关资源
最近更新 更多