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

如何在React中通过map函数实现点击单个项时设置其边框颜色

实现方案

步骤1:替换全局状态

你当前使用的布尔类型全局状态openDes会控制所有卡片同步响应,首先替换为存储当前选中卡片索引的状态:

// 替换原有 const [openDes, setDes] = useState(false) 代码
const [selectedCardIndex, setSelectedCardIndex] = useState(null);

步骤2:修改遍历渲染逻辑

在map遍历中新增选中状态判断,给对应被选中的卡片加边框,同时控制单个卡片的展开收起:

{faqData.map((item, index) => {
  // 判断当前卡片是否被选中
  const isSelected = selectedCardIndex === index;
  return (
    // 最外层容器加点击事件和边框样式
    <SimpleFlexContainer
      sx={{ 
        flexDirection: "column", 
        m: "20px 0px",
        // 选中时显示指定颜色边框,可自行修改颜色值
        border: isSelected ? "2px solid #165DFF" : "none",
        borderRadius: "4px",
        overflow: "hidden"
      }}
      // 点击当前卡片时切换选中状态
      onClick={() => setSelectedCardIndex(isSelected ? null : index)}
    >
      <SimpleFlexContainer
        sx={{
          background: "#F4F4F5",
          width: "100%",
          p: "15px 25px",
          justifyContent: "space-between",
          alignItems: "center",
        }}
      >
        <SimpleFlexContainer>
          <SmallTypo
            sx={{ fontWeight: "bold", mr: { xs: "15px", md: "25px" } }}
          >
            Question
          </SmallTypo>
          <SmallTypo sx={{ fontWeight: "bold" }}>{item.q}</SmallTypo>
        </SimpleFlexContainer>
        <Box>
          <IconButton>
            {isSelected ? (
              <RemoveIcon />
            ) : (
              <AddIcon />
            )}
          </IconButton>
        </Box>
      </SimpleFlexContainer>
      <Box
        sx={{
          display: isSelected ? "inherit" : "none",
          background: "white",
          p: "26px",
          border: "1px solid #F4F4F5",
        }}
      >
        <SmallTypo>{item.a}</SmallTypo>
      </Box>
    </SimpleFlexContainer>
  );
})}

额外说明

如果你只需要点击右侧图标才触发选中和展开,把onClick事件从最外层容器移到IconButton组件上即可。边框的颜色、粗细、圆角都可以根据需求自行修改sx里的对应属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03