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

将jQuery的addClass/removeClass功能迁移到React(非toggle场景)

组件类型确认

你已经在使用useState,这是仅支持函数组件的React Hooks API,所以你当前使用的是函数组件。

网格切换功能实现方案

核心思路是用状态驱动视图,不需要手动操作DOM增删类,所有类名通过状态动态生成,点击逻辑里做重复点击拦截即可满足需求。

实现步骤

  • 声明状态存储当前激活的网格类型,可选值为museum/large,默认可按你需要设置
  • 编写点击处理函数:如果点击的网格类型和当前激活值一致,直接返回不做任何操作;不一致则更新状态
  • 给画廊列表、按钮动态绑定对应类名

完整代码示例

import { useState } from 'react'

function Gallery() {
  // 初始化默认激活小网格
  const [activeGrid, setActiveGrid] = useState('museum')

  const handleGridSwitch = (type) => {
    // 点击当前已激活按钮直接返回,不切换状态
    if (type === activeGrid) return
    setActiveGrid(type)
  }

  return (
    <div>
      {/* 切换按钮区域 */}
      <div className="grid-switch-btns">
        <button
          id="museum-grid-btn"
          className={activeGrid === 'museum' ? 'grid-active' : ''}
          onClick={() => handleGridSwitch('museum')}
        >
          小网格
        </button>
        <button
          id="large-grid-btn"
          className={activeGrid === 'large' ? 'grid-active' : ''}
          onClick={() => handleGridSwitch('large')}
        >
          大网格
        </button>
      </div>

      {/* 画廊列表 */}
      <div
        id="gallery-list"
        className={activeGrid === 'museum' ? 'museum-grid' : 'large-grid'}
      >
        {/* 你的画廊内容 */}
      </div>
    </div>
  )
}

export default Gallery

逻辑说明

  • 不需要手动操作DOM增删类,所有类名随activeGrid状态自动更新,替代你之前的jQuery DOM操作逻辑
  • 重复点击已激活按钮时直接终止逻辑,完全满足你不使用toggle、保持当前状态不变的需求
  • 你已有的CSS类.museum-grid/.large-grid/.grid-active不需要做任何修改,直接复用即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:03