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

React中结合If条件用Tailwind动态修改表格文本颜色

动态设置React表格单元格文本颜色问题

问题描述

从JSON获取数据渲染React表格,需要根据盈亏条件动态设置"Kar/Zarar"列的文本颜色:当(item.hisseGuncelFiyat * item.hisseAdet - item.hisseMaliyet * item.hisseAdet < 0)时显示红色,否则显示绿色。但原写法未生效,核心错误代码片段:

<td className='py-2 whitespace-nowrap'>
  {item.hisseGuncelFiyat * item.hisseAdet - item.hisseMaliyet * item.hisseAdet < 0
   ? "text-red-400"
   : "text-green-400" 
  }
  <span>₺</span>
</td>

错误原因

你把Tailwind类名直接作为文本内容输出了,并没有将其应用到元素的className属性上,所以样式不会生效。

正确实现方法

步骤1:抽离计算逻辑(可选但推荐)

先计算出盈亏值,避免重复计算,提升代码可读性:

const karZarar = item.hisseGuncelFiyat * item.hisseAdet - item.hisseMaliyet * item.hisseAdet;

步骤2:动态绑定类名

将条件判断的类名应用到包裹盈亏文本的元素(或td本身)的className中:

方案一:直接在td上绑定动态类

<td className={`py-2 whitespace-nowrap ${karZarar < 0 ? 'text-red-400' : 'text-green-400'}`}>
  {karZarar}
  <span>₺</span>
</td>

方案二:用span包裹文本并绑定类

如果只需要文本变色,td的其他样式保持不变,可以用span单独包裹数值:

<td className='py-2 whitespace-nowrap'>
  <span className={karZarar < 0 ? 'text-red-400' : 'text-green-400'}>
    {karZarar}
  </span>
  <span>₺</span>
</td>

完整修改后的组件代码

const Table = () => {
  return (
    <div className='overflow-auto w-full'>
      <table className="mt-10 w-full">
        <thead className='bg-blue-900 text-white h-8'>
          <tr className='divide-x-2 divide-gray-200'>
            <th>Aracı Kurum</th>
            <th>Hisse Adı</th>
            <th>Maliyet</th>
            <th>Güncel Fiyat</th>
            <th>Adet</th>
            <th>Kar/Zarar</th>
            <th>Düzenle/Sil</th>
          </tr>
        </thead>
        <tbody className='text-center divide-y-2'>
          {data.map((item) => {
            // 抽离盈亏计算逻辑
            const karZarar = item.hisseGuncelFiyat * item.hisseAdet - item.hisseMaliyet * item.hisseAdet;
            return (
              <tr key={item.hisseId} className='odd:bg-white even:bg-slate-100 divide-x-2 divide-gray-200'>
                <td className='py-2 whitespace-nowrap'>{item.araciKurum}</td>
                <td className='py-2 whitespace-nowrap'>{item.hisseAd}</td>
                <td className='py-2 whitespace-nowrap'>{item.hisseMaliyet}<span>₺</span></td>
                <td className='py-2 whitespace-nowrap'>{item.hisseGuncelFiyat}<span>₺</span></td>
                <td className='py-2 whitespace-nowrap'>{item.hisseAdet}</td>
                {/* 动态绑定类名到td */}
                <td className={`py-2 whitespace-nowrap ${karZarar < 0 ? 'text-red-400' : 'text-green-400'}`}>
                  {karZarar}
                  <span>₺</span>
                </td>
                <td className='text-center gap-6 flex justify-center py-2 whitespace-nowrap'>
                  <button><BiEdit size={25} className='text-green-500'/></button>
                  <button><BiTrashAlt size={25} className='text-red-500'/></button>
                </td>
              </tr>
            )
          })}
        </tbody>
      </table>
    </div>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:37:04