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

React实现点击交通分类图标仅当前项添加active类激活

问题根因

你使用了单个布尔值transportationClick作为所有交通选项的激活判断依据,所有选项的类名逻辑都绑定这同一个状态,点击任意项都会全局切换这个布尔值,必然导致所有选项同步变更激活状态。

修复方法

将状态改为存储当前激活选项的唯一标识,点击时更新状态为对应选项的标识,渲染时逐次判断当前选项标识与状态值是否一致,一致才追加active类。

修正后可直接运行的代码:

import { useState } from 'react';
import { FaCar, FaBus, FaWalking } from 'react-icons/fa';

// 交通选项配置,后续新增选项直接在数组中添加即可
const TRANSPORT_LIST = [
  { id: 'car', icon: <FaCar /> },
  { id: 'bus', icon: <FaBus /> },
  { id: 'walking', icon: <FaWalking /> }
];

const TransportationSelector = () => {
  // 存储当前激活的选项ID,默认无选中项,需要默认选中直接传对应ID即可
  const [activeId, setActiveId] = useState('');

  return (
    <div className="transportation-types">
      {TRANSPORT_LIST.map(item => (
        <div
          key={item.id}
          className={`transportation ${activeId === item.id ? 'active' : ''}`}
          onClick={() => setActiveId(item.id)}
        >
          <div className="transportation-icon">
            {item.icon}
          </div>
        </div>
      ))}
    </div>
  );
};

export default TransportationSelector;

扩展:支持点击取消选中

如果需要点击已激活的选项时取消选中状态,把点击逻辑替换为以下即可:

onClick={() => setActiveId(prev => prev === item.id ? '' : item.id)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:21:26