微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 React Native 中使用 useState 更改文本颜色

如何解决在 React Native 中使用 useState 更改文本颜色

我有一个 color.js 类,我在其中定义了一些颜色代码,其结构如下:

export default {
  black: '#000',white: '#fff',yellow: '#C18D00',green: '#1AE06A'
}

在我制作的一个组件中 BookedCard.js 我有许多预订状态,例如已确认、待处理等。基于每个状态,我想更改文本的颜色,例如:

function BookedCard({ status,title,dateTime }) {

    const [ statusColor,setStatusColor ] = useState(color.black)

    switch (status) {
        case 'Pending':
            setStatusColor(color.yellow)
            break;
        case 'Rejected':
            setStatusColor(color.red)
            break;
        case 'Confirmed':
            setStatusColor(color.green)
            break;
        default:
            break;
    }
}

然后我在组件中使用它:

<Text style={[styles.status,{ color: statusColor }]}>{status}</Text>

显示错误

重新渲染太多。 React 限制渲染次数以防止无限循环。

现在,通过阅读有关这里发生的事情的其他问题,我明白了 useState 陷入了一次又一次渲染组件的循环中,但我似乎无法弄清楚如何在我的情况可能是答案就在那里,但我现在太新,无法理解。

解决方法

您不能直接在功能组件内部设置状态。理想情况下应该是这样的:

import {useEffect} from 'react';

function BookedCard({ status,title,dateTime }) {
  const [statusColor,setStatusColor] = useState(color.black);

  useEffect(() => {
    switch (status) {
      case "Pending":
        setStatusColor(color.yellow);
        break;
      case "Rejected":
        setStatusColor(color.red);
        break;
      case "Confirmed":
        setStatusColor(color.green);
        break;
      default:
        break;
    }
  },[status]);
}

,

解决方法有两种:

  1. 使用 useEffect 钩子。
React.useEffect(() => {
    switch (status) {
        // ...
    }
},[status])
  1. 在调用 setState 之前,例如 setStatusColor(color.yellow),您需要检查颜色是否已经是 yellow。例如:
if (statusColor !== color.yellow) {
  setStatusColor(color.yellow)
}

这些可以帮助你摆脱无限循环。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?