You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React点击同一元素切换div显示隐藏的toggle功能现有代码如何改造?

实现同按钮切换显示/隐藏的修改方案

只需修改toggleComment函数的逻辑,增加当前激活状态判断即可,原有样式判断逻辑无需改动:

const [posts, setPosts] = useState([]);
const [commentState, commentChange] = useState({
  activeObject: null
});

const toggleComment = (index) => {
  const targetPost = posts[index];
  // 若点击的是当前已激活的项,则关闭,否则切换为当前项
  const newActiveObject = commentState.activeObject === targetPost ? null : targetPost;
  commentChange({...commentState, activeObject: newActiveObject})
}

const toggleActiveStyles = (index) => {
  if(posts[index] === commentState.activeObject) {
    return "dashboard__commentContent toggle";
  } else {
    return "dashboard__commentContent";
  }
}


return error ? (
  <span>{error}</span>
) : (
  // 注意:jsx中列表渲染需要外层包裹父元素,同时给子项加唯一key属性
  <>
    {posts.map((post, i) => (
      <React.Fragment key={i}>
        <button onClick={() => toggleComment(i)} >toggle</button>
        <div className={toggleActiveStyles(i)}>
          <h1>{post.title}</h1>
        </div>
      </React.Fragment>
    ))}
  </>
)

补充说明:

  • 如果你的post数据存在唯一id属性,建议用id替代对象引用做相等判断,避免因为数组重排、对象引用更新导致的逻辑异常,判断逻辑调整为commentState.activeObject?.id === targetPost.id即可
  • 原代码缺少列表渲染的父元素包裹和key属性,补充后可消除React的语法警告

内容的提问来源于stack exchange,提问作者james williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:09:01