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

React中如何在map()内使用条件判断切换要渲染的数组字段

实现方案

你提到的item[ColState]动态属性访问写法本身是正确的,运行失败大概率是细节写错导致的,以下是完整可运行的实现代码:

import { useState } from 'react';

// 你的原始数组数据
const stuff = [
  { id: "1", col1: 232, col2: 232 },
  { id: "2", col1: 400, col2: 650 },
  { id: "3", col1: 300, col2: 300 }, // 原数组存在id重复问题,建议修正为唯一值
];

export default function ChartComponent() {
  // 状态定义注意大小写统一,这里使用小驼峰命名,初始值设为默认展示的col1
  const [colState, setColState] = useState('col1');

  return (
    <div>
      {/* 切换按钮 */}
      <button onClick={() => setColState('col1')}>显示col1数据</button>
      <button onClick={() => setColState('col2')}>显示col2数据</button>

      {/* 渲染列表:注意map必须加唯一key属性,否则React会报渲染警告
          如果你把原数组赋值给了chartData变量,把遍历源换成chartData即可 */}
      {stuff.map((item) => (
        <div key={item.id}>
          {/* 方括号动态访问属性即可实现切换 */}
          {item[colState]}%
        </div>
      ))}
    </div>
  )
}

常见问题排查

  • JSX的{}中只能放表达式,不能放if语句这种代码块,你之前的if(ColState=="col2"){return item.col2}属于语句,无法直接嵌入JSX。如果要写判断可以用三元表达式替代:{colState === 'col2' ? item.col2 : item.col1},效果和动态属性访问一致
  • JS变量大小写敏感,注意状态变量的命名要统一,比如定义的是colState就不能写成ColState
  • 数组元素的id重复会导致key属性冲突,也可能引发渲染异常,建议修正为唯一值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:27:03