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

React中根据余额率正负值设置文本颜色的问题求助

React中根据数组元素值动态设置文本颜色的问题解决方法

你的问题出在单一状态控制所有元素颜色:你用了一个全局的isNegative状态,遍历用户数组时,每次setIsNegative都会更新这个状态,最终状态会被最后一个用户的balanceRate判断结果覆盖,导致所有列表项都使用同一个颜色。

修正方案

不需要使用useState和useEffect,直接在渲染每个列表项时,根据当前项的balanceRate值判断颜色即可,这样每个元素能独立控制自身样式:

import React from "react";
import { users } from "../../public/data/data";

const TopCollections = () => {
  return (
    <section>
      <div className="container max-w-[1216px] mx-auto px-4">
        <div>
          <h3>Top collections over</h3>
          <p>Last 7 days</p>
          <ul>
            {users.map((item, index) => {
              return (
                <li key={index}>
                  <span>{index + 1}</span>
                  <img src={item.avatar} alt={item.username} />
                  <div>
                    <p>{item.username}</p>
                    <p>{item.balance}</p>
                  </div>
                  <span
                    className={`${
                      item.balanceRate < 0 ? "text-[#FF002E]" : "text-[#14C8B0]"
                    }`}
                  >
                    {item.balanceRate}%
                  </span>
                </li>
              );
            })}
          </ul>
        </div>
      </div>
    </section>
  );
};

export default TopCollections;

说明

  • 每个列表项的颜色仅依赖自身的balanceRate属性,无需额外状态存储,避免了状态更新带来的覆盖问题
  • 移除了不必要的useEffect和useState,代码更简洁,渲染逻辑更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:50