微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向包裹在`div`中的一组`cards`添加onclick函数

如何解决向包裹在`div`中的一组`cards`添加onclick函数

我有一个反应组件,当单击组中的任何卡片时,我需要添加一个动作。问题是我需要能够确定点击了哪张卡片才能正确执行我的操作。我曾尝试向每张卡片添加 keyindex,但我无法弄清楚如何捕获点击了哪张卡片这是我的代码

<>
      <div className={styles.cardContainer}>
        <div
          className={`card-group ${styles.cardGroups}`}
  >>>>>   onClick={(e) => console.log(e.target)}
        >
          <Card index={type} className={styles.observationsType}>
            <div className="">
              <h2 className={styles.title}>{title}</h2>
              <div className={styles.limits}>
                {!!lim && !!lim.label.upper ? `Upper Limit: ${lim.label.upper}` : ""}
              </div>
              <div className={styles.limits}>
                {!!lim && !!lim.label.lower ? `Lower Limit: ${lim.label.lower}` : ""}
              </div>
            </div>
          </Card>
          <Card index={type} className={styles.observationsDateCard}>
            <div className={styles.date}>
              <div>{!!obs.recordedDate && moment(obs.recordedDate).format("L")}</div>
              <div>{!!obs.recordedDate && moment(obs.recordedDate).format("LT")}</div>
            </div>
          </Card>
          <Card index={type} className={`text-center ${styles.observationLatest}`}>
            <div className={styles.latest}>
              {value}
              <div>{obs.unit}</div>
            </div>
          </Card>
        </div>
      </div>
    </>

您将在 card-group div 中看到我添加了带有 console.log 的 onClick 函数。我为每张卡片添加一个索引,其中包含每张卡片中信息组的名称,希望以此名称为目标。但这不起作用。无论如何,我是否可以到达该物业或进行此操作的更好方法

解决方法

不要将卡片渲染为独立组件,而是尝试将它们的数据存储在数组中并使用 map 函数渲染卡片。然后,您可以为每张卡片赋予一个以索引为参数的 onClick 事件,这样您就知道正在点击哪张卡片。像这样:

创建一组卡片

const cards = [
    {
        name: "card 1",// some other data
    },{
        name: "card 2",{
        name: "card 3",// some other data
    }
]

创建一个捕获点击卡片的函数:

function onCardClick(index) {
    const selectedCard = cards[index];

    // do some stuff with the clicked card
}

渲染数组中的卡片:

{cards.map((card,index) => <Card onClick={() => onCardClick(index)} />)}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。