当前位置: 首页 > 知识库问答 >
问题:

在React中,如何更改在迭代中创建的一个元素的类名,单击另一个元素?

班泽语
2023-03-14

我正在尝试将一个类添加到一个特定的元素中。用户单击remove按钮,在将“remove”类添加到包含行DIV之后,表中包含该按钮的整行应显示为禁用。使用Array.Map创建了多行。我试了一下:如何使用refs访问/重写元素的className?但是useRef只针对迭代中创建的div的最后一个版本,而useState for conditional className则更改该div的所有迭代。

const AccordionBody = ({...props }) => {
  
  const [data, setData] = useState(null);
  //data is loaded from api
  // set state 
  ...
  const handleRemove = (id) => {
    // ... sending remove ID to api 
    // add class "removed" to grandparent of button
  };

  return (
   {data.list.map((item) => (
          // change this parent div. Tried useRef and conditional className here.
          <div className={`c-table__row`} key={item.id} >
            <div className="c-table__row__item">
              // this is the button triggering the change
              <div className="e-btn__x" onClick={(e) => handleRemove(item.id)}></div>
              <img className="u-img--round" src={item.icon}/>
              <span className="c-table__cell">
                {item.name}
              </span>
            </div>
            <div className="c-table__row__item ">
                {item.location}
            </div>
            //more info in this row
            ...
          </div>
        ))}
}

共有1个答案

宓昂雄
2023-03-14

将行是否被禁用的状态放入状态中的data.list数组。大概是这样的:

{data.list.map((item, i) => (
  // ...
  onClick={(e) => handleRemove(i)
const handleRemove = (index) => {
  setData({
    ...data,
    list: [
      ...data.list.slice(0, index),
      { ...data.list[index], disabled: true },
      ...data.list.slice(index + 1),
    ]
  });
};

然后,在呈现时,使用disabled属性为行指定类名。

<div
    className={`c-table__row${item.disabled ? ' disabled' : ''}`}
    key={item.id}
>
 类似资料:
  • 问题内容: 现在,我有一个div,它基本上是一个巨大的正方形,在div内,我还有另一个div,它是简单的文本,上面写着“ Upload File”,同时还有一个隐藏的input type = file元素。当用户按下div时,我要触发文件上传元素。到目前为止,我想出的代码是: 因此,我在CSS中将文件输入元素设置为。一旦他们在div id =“ test”中的任意位置单击,我想触发对文件上传元素的

  • 问题内容: 我已经看过其他几个问题,但似乎无法弄清楚它们中的任何一个,所以这是我的问题,我想要一个div或span,当您将鼠标悬停在它上面时,就会出现一个区域,就像是一滴水下。 例如我有一个div,我想将鼠标悬停在上面,并让它显示有关我悬停的项目的一些信息 但这似乎不起作用,我不知道为什么…,如果有办法在CSS中做到这一点,我想知道,但是我想要任何和所有建议。 问题答案: 仅当隐藏的div是用于悬

  • 问题内容: 如何检查一个DOM元素是否是另一个DOM元素的子元素?有内置的方法吗?例如,类似: 要么 如果没有,那么有什么想法怎么做?它还需要跨浏览器。我还应该提到,孩子可以嵌套在父级以下的多个级别。 问题答案: 更新: 现在有一种本地方法可以实现此目的。。在评论中也提到了答案。 旧答案: 使用该属性应该可以。从跨浏览器的角度来看,它也是非常安全的。如果已知这种关系是一级的,则可以简单地检查一下:

  • 问题内容: 我在SQLite中有两个表: 我的问题是,我该如何编写一个SQL查询来返回不在中的名称? 例如: 在这个例子中,SQL查询应返回的元素,并从,因为他们不是。 问题答案: 这是在“显而易见的”标准SQL中执行的操作: 还有其它方法,如使用,中子句和操作。

  • 问题内容: 我对CSS选择器有疑问。仅当在具有类名的a中时,如何选择具有特定类名的a ?这个CSS类在其他地方使用,我不想在任何地方更改样式。 问题答案: 只需在父元素和后代元素之间使用CSS后代选择器(空格)即可: 在这种情况下,仅适用于Class的规则,前提是其祖先是该Class的规则。相反,您可以使用直接子组合器,但是您必须指定与每个父/祖先的关系,直到需要其类的父子/祖先,这可能很难维护C

  • 问题内容: 还有在JavaScript,但我怎么能插入一个元素 后, 另一种元素,而不使用jQuery或其他库? 问题答案: referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); 您要放置的节点在哪里。If 是其父元素中的最后一个子元素,这很好,因为它将是,并通过添加到列表的末尾来处理这种情况。 所以: