2 回答
TA贡献1829条经验 获得超9个赞
你需要useMemo在这里
const bg = useMemo(() => {
if (rating && rating <= 3) {
return 'orange'
} else if (rating && rating >= 4 && rating <= 7) {
return 'yellow'
} else if (rating && rating >= 8) {
return 'green'
}
}, [rating])
所以现在useMemo只有当值rating被更改并将返回值保存到时才会调用函数回调const bg
如果您希望跨度的背景颜色基于 的值设置bg,则必须更改跨度定义,如下所示
<span style={{backgroundColor: bg}}>...
TA贡献1825条经验 获得超4个赞
请参阅Hooks 规则和其中的代码示例。useState
必须在组件的主体内调用,如下所示:
const Single = ({rating, name, distance}: Single) => {
const [bg, setBg] = useState('gray')
if (rating && rating <= 3) {
setBg(`orange`)
} else if (rating && rating >= 4 && rating <= 7) {
setBg(`yellow`)
} else if (rating && rating >= 8) {
setBg(`green`)
}
return (
<div>
<span backgroundColor={bg}>
{rating !== null ? rating : `NA`}
</span>
</div>
)
}
添加回答
举报