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

React Native根据API值修改Styled Components背景色的实现方案

解决Styled Components根据API返回值动态设置背景色的问题

1. 修正API数据获取逻辑

你当前用forEach遍历数组时犯了一个错误:forEach没有返回值(始终返回undefined),导致risk状态无法正确存储levelRiskMorse的值。针对模拟数据的单条任务场景,可直接取数组第一项的风险等级:

const [riskLevel, setRiskLevel] = useState<string>('');

useEffect(() => {                            
    async function getRiskLevel(){
        const { data } = await api.get('allTasks');
        // 若返回多条任务,需调整为遍历存储或按需处理
        if (data.length > 0) {
            setRiskLevel(data[0].levelRiskMorse);
        }
    }
    getRiskLevel();
}, [])

2. 修改Styled组件,支持动态背景色

给ContainerRating添加接收风险等级的Props,根据传入的值判断是否设置绿色背景:

import styled from 'styled-components/native';

export const ContainerRating = styled.View<{ levelRiskMorse?: string }>`
    border-width: 0.6px;
    border-color: ${({theme}) => theme.colors.default_color};
    flex-direction: row; 
    justify-content: space-around;                               
    height: 50px;
    align-items: center;
    margin-top: 2px;
    border-left: unset;
    // 匹配NoRisk时设为绿色,否则用默认透明背景
    background-color: ${({ levelRiskMorse }) => 
        levelRiskMorse === 'NoRisk' ? 'green' : 'transparent'};
`;

提示:如果项目使用主题色体系,可把'green'替换为({theme}) => theme.colors.green,保持全局风格统一。

3. 在组件中传递Props给Styled组件

将获取到的riskLevel作为Props传入ContainerRating,触发样式判断:

return(
    <View>
        <ContainerRating levelRiskMorse={riskLevel}>
            <Text>Sem Risco</Text>
            <Text>0-24</Text>
        </ContainerRating>                         
    </View> 
)

额外说明

  • 若API返回多条任务,需将状态改为数组类型(useState<string[]>([])),遍历渲染每个ContainerRating时对应传入每条任务的levelRiskMorse。
  • 注意字符串大小写匹配:判断条件需与API返回的"NoRisk"完全一致,避免因大小写错误导致样式不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:34:01