如何解决在 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]);
}
,
解决方法有两种:
- 使用
useEffect
钩子。
React.useEffect(() => {
switch (status) {
// ...
}
},[status])
- 在调用 setState 之前,例如
setStatusColor(color.yellow)
,您需要检查颜色是否已经是yellow
。例如:
if (statusColor !== color.yellow) {
setStatusColor(color.yellow)
}
这些可以帮助你摆脱无限循环。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。