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

如何基于接收的数值为七段LED数码管元素添加对应className?

实现方案

核心修改点

  • 先修复switch逻辑的类型匹配问题:原有代码中switch判断的是数值类型的3,但case值为字符串类型,会导致匹配失败走默认逻辑,需要统一类型。
  • 为每一段的className添加动态判断逻辑:如果当前段的标识存在于disabledSegments数组中,就追加segment-disable禁用类。

修改后完整组件代码

function App() {  
  let disabledSegments = [];
  // 统一转成字符串匹配,避免类型不匹配问题
  switch(String(3)) {
    case '1':
        disabledSegments = ['segment-a', 'segment-d', 'segment-e', 'segment-f', 'segment-g']
        break;
    case '2':
        disabledSegments = ['segment-c', 'segment-f'];
        break;
    case '3':
        disabledSegments = ['segment-e', 'segment-f'];
        break;
    default:
        break;
  }

  // 封装辅助函数,简化className判断逻辑,避免重复代码
  const getSegmentClass = (segmentName) => {
    return `segment ${segmentName} ${disabledSegments.includes(segmentName) ? 'segment-disable' : ''}`
  }

  return(
    <div className="led-number">
      <div className={getSegmentClass('segment-a')}>
        <svg width="69" height="15" viewBox="0 0 69 15" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M14.269 14.8295H54.5517L68.4885 1.59469C67.1985 0.597612 65.5846 3.8147e-06 63.8301 3.8147e-06H4.63794C2.89411 3.8147e-06 1.29303 0.589094 0.00726318 1.57233L14.269 14.8295Z" fill="#262A34"/>
        </svg>
      </div>
      
      <div className={getSegmentClass('segment-b')}>
        <svg width="17" height="65" viewBox="0 0 17 65" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M0.624405 14.2662V55.4704L12.2954 64.2173C14.77 62.9539 16.4669 60.3866 16.4669 57.4177V5.62484C16.4669 3.80751 15.8299 2.14251 14.7721 0.832241L0.624405 14.2662Z" fill="#262A34"/>
        </svg>
      </div>

      <div className={getSegmentClass('segment-c')}>
        <svg width="17" height="65" viewBox="0 0 17 65" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M0.624405 50.7207V9.51645L12.2954 0.769611C14.77 2.03407 16.4669 4.60029 16.4669 7.56917V59.3621C16.4669 61.1783 15.8299 62.8433 14.7721 64.1557L0.624405 50.7207Z" fill="#262A34"/>
        </svg>
      </div>
  
      <div className={getSegmentClass('segment-d')}>
        <svg width="69" height="15" viewBox="0 0 69 15" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M14.269 0.169458H54.5517L68.4885 13.4053C67.1985 14.4003 65.5846 15 63.8301 15H4.63793C2.8941 15 1.29302 14.4088 0.00725555 13.4256L14.269 0.169458Z" fill="#262A34"/>
        </svg>
      </div>
      
      <div className={getSegmentClass('segment-e')}>
        <svg width="16" height="65" viewBox="0 0 16 65" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M1.71614 64.1944C0.644493 62.8799 0 61.2032 0 59.3741V7.58124C0 4.61236 1.69695 2.04614 4.17155 0.781677L15.8425 9.52852V51.064L1.71614 64.1944Z" fill="#262A34"/>
        </svg>
      </div>

      <div className={getSegmentClass('segment-f')}>
        <svg width="16" height="65" viewBox="0 0 16 65" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M1.71614 0.815502C0.644493 2.1311 0 3.80888 0 5.63687V57.4298C0 60.3986 1.69695 62.9659 4.17155 64.2293L15.8425 55.4825V13.947L1.71614 0.815502Z" fill="#262A34"/>
        </svg>
      </div>

      <div className={getSegmentClass('segment-g')}>
        <svg width="63" height="17" viewBox="0 0 63 17" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M51.4494 0.390018H11.0175L0.249847 8.32726L11.0175 16.2656H26.4329H36.034H51.4494L62.217 8.32726L51.4494 0.390018Z" fill="#262A34"/>
        </svg>
      </div>
    </div>
  )
}

逻辑说明

当前硬编码数值为3的情况下,e、f段会被自动添加禁用类变为灰色,显示效果和预期的数码管3完全一致。后续如果要改成动态数值,把switch里的固定值替换成组件接收的props或者内部状态变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:04