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

如何从数组中提取100级色值并在循环外的单独区域渲染

修改后可直接运行的代码

const colorPalette = {
  Dark10: "#FEF9E8",
  Dark20: "#FDF4DE",
  Dark30: "#FCEFCC",
  Dark40: "#F7E0A2",
  Dark50: "#F0CC72",
  Dark60: "#D5B363",
  Dark70: "#C7A55E",
  Dark80: "#B39553",
  Dark90: "#9D8240",
  Dark100: "#89723E",
  Dark110: "#7C6737",
  Dark120: "#715E32",
  Dark130: "#66552E",
  Dark140: "#5B4A28"
};

const ColorSwatches = ({ colors, shade }) => {
  // 过滤对应色系的所有色值
  const filteredEntries = Object.entries(colors).filter(([key]) => key.includes(shade));
  // 单独提取100级色值,用后缀匹配比索引判断更稳定
  const oneHundredColor = filteredEntries.find(([key]) => key.endsWith('100'));
  // 过滤出除100级外的其他色值用于普通色块渲染
  const normalColors = filteredEntries.filter(([key]) => !key.endsWith('100'));

  return (
    <div className="wrapper">
      {/* 100级专属展示块 */}
      <div className="bigNumber">
        <h1>{oneHundredColor?.[0]}</h1>
        <p>{oneHundredColor?.[1]}</p>
      </div>
      {/* 其他等级色值渲染 */}
      {normalColors.map((color, i) => (
        <div key={i} style={{ backgroundColor: color[1] }}>
          <h2>{color[0]}</h2>
          <p>HEX {color[1]}</p>
        </div>
      ))}
    </div>
  );
};

核心修改说明

  • 调整了取值时序:在渲染逻辑执行前就完成100级色值的提取,解决原代码「先渲染专属块再赋值」导致的取值为空问题
  • 替换索引判断逻辑:用endsWith('100')匹配色值名后缀,适配色值列表顺序变化、数量增减的场景,稳定性更高
  • 修复JSX语法问题:将原代码的class改为React规范的className,避免控制台告警
  • 增加可选链?.做容错处理,避免未找到100级色值时出现渲染报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:04