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

如何将React应用中的If/Else语句转换为非条件判断写法

用配置映射重构React条件渲染(替代If/Else)

你的代码里大量重复了组件结构,只有最后一行属性展示不同。可以通过提取公共逻辑+配置映射的方式彻底去掉if/else,代码更简洁且易扩展:

步骤1:定义属性展示配置

先把不同属性对应的展示规则统一存到一个配置对象里,后续新增属性直接加配置就行:

const productPropertyConfig = [
  {
    key: 'kg',
    label: 'Weight',
    render: (val) => `${val.kg} KG`
  },
  {
    key: 'mb',
    label: 'Size',
    render: (val) => `${val.mb} MB`
  },
  {
    key: 'length',
    label: 'Dimensions',
    render: (val) => `${val.length}x${val.width}x${val.height}`
  }
];

步骤2:重构渲染逻辑

提取所有重复的组件结构,只动态渲染不同的属性部分:

{data.map((val, key) => {
  // 找到当前产品匹配的属性配置
  const matchedConfig = productPropertyConfig.find(config => val[config.key]);

  return (
    <div className="cardproductlist" key={key}>
      <div className="valuescontainercheckbox pt-4 ml-3">
        <input
          className="delete-checkbox"
          type="checkbox"
          value={val.sku}
          id={val.sku}
          onChange={handleCheck}
        />
      </div>
      <div className="valuescontainer">
        <span> {val.name}</span>
      </div>
      <div className="valuescontainer">
        <span> {val.price}$</span>
      </div>
      <div className={`valuescontainer ${!matchedConfig ? 'pb-5' : ''}`}>
        <span>{val.sku}</span>
      </div>
      {/* 动态渲染匹配的属性内容 */}
      {matchedConfig && (
        <div className="valuescontainer">
          <span className="pb-5">
            <span>{matchedConfig.label}: {matchedConfig.render(val)}</span>
          </span>
        </div>
      )}
    </div>
  );
})}

为什么这么做?

  • 彻底消除条件分支:不用再写一堆if/else,新增产品属性只需要在配置里加一条规则
  • 符合DRY原则:重复代码只写一次,减少维护成本
  • 可读性更高:配置和渲染逻辑分离,一眼就能看懂每种属性的展示方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:30:15