javascript - 更改React组件中返回多个重复元素的单个元素的样式

标签 javascript reactjs frontend

我正在 React 中渲染一个 Canvas 组件,它返回 <rect> 的列表元素,我想要实现的是更改单击的 <rect> 的颜色只是,但是在我的代码中,每当我单击其中一个元素时,元素的完整列表都会更新,我如何更新单击的 <rect>仅元素?

下面是我的代码:

import { useState } from "react";
import styles from "./Canvas.module.css";

let data = [
  {
    id: "1",
    x: "50",
    y: "20",
  },
  {
    id: "2",
    x: "90",
    y: "20",
  },
  {
    id: "3",
    x: "130",
    y: "20",
  },
];

const Canvas = () => {
  const [redRectangle, setRedRectangle] = useState();

  const setColorHandler = () => {
    setRedRectangle(styles.rect);
  };

  let arr = data.map((element) => {
    return (
      <rect
        className={redRectangle}
        key={element.id}
        width="30"
        height="4"
        x={element.x}
        y={element.y}
        onClick={setColorHandler}
      />
    );
  });

  return (
    <svg width="800" height="600" id="svg">
      {arr}
    </svg>
  );
};

export default Canvas;

运行代码之前

enter image description here

点击一个<rect>

enter image description here

最佳答案

首先,为 rect 创建一个单独的组件。创建后,向 rect 组件添加组件级别状态,指定颜色。然后将矩形组件映射到canvas函数中。

映射后,创建一个函数来使用 id 更改单个矩形组件的类。每当您调用该函数时,都将元素的 id 作为参数传递给该函数。完成此操作后,使用 forEach 循环检查从参数接收到的 elementID 是否等于 currentElement Id。如果相等,则更改该特定组件的状态。

谢谢😊

关于javascript - 更改React组件中返回多个重复元素的单个元素的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69234095/

相关文章:

javascript - 使用钩子(Hook)输入搜索过滤器数组

javascript - vue js 可以全局注册所有组件吗?

javascript - React-select:背景颜色未填满 wordWrap :"scroll"上的全宽

javascript - 设置 fengyuanchen jQuery Cropper.js v3.0.0 预览大小与图像相同

javascript - 滚动显示不起作用

javascript - 搜索 JSON 数组并返回兄弟标记值

javascript检查数组是否连续包含多个元素

reactjs - React Redux Firebase 中的私有(private)路由不起作用

html - HTML/CSS/ReactJS 中的文本对齐属性

CSS 属性选择器排除