我的应用程序运行虽然有点慢,因为我循环创建按钮并再次循环更改按钮的颜色
它很慢,因为每次我更改按钮中的颜色时,我都必须在useState
对象数组中循环
我的问题是,我如何只渲染一个使用 Array 的对象useState
?或者..有没有比这样循环更快的方法/更好的方法?
我还尝试将选中状态作为目标,booleanMonth[0].checked=true
在不循环的情况下更改状态,但不会更改颜色。
这是数组:
const [booleanMonth,setMonth]=useState([
{key:0,value:'January',title:'Jan',color:'black',checked:false},
{key:1,value:'February',title:'Feb',color:'black',checked:false},
{key:2,value:'March',title:'Mar',color:'black',checked:false},
{key:3,value:'April',title:'Apr',color:'black',checked:false},
{key:4,value:'May',title:'May',color:'black',checked:false},
{key:5,value:'June',title:'Jun',color:'black',checked:false},
{key:6,value:'July',title:'Jul',color:'black',checked:false},
{key:7,value:'August',title:'Aug',color:'black',checked:false},
{key:8,value:'September',title:'Sep',color:'black',checked:false},
{key:9,value:'October',title:'Oct',color:'black',checked:false},
{key:10,value:'November',title:'Nov',color:'black',checked:false},
{key:11,value:'December',title:'Dec',color:'black',checked:false}
])
这是我创建按钮的地方,如果数组 ABOVE 中的一个对象由于我按下按钮而发生更改,则该按钮将循环:
const createButtonMonth = useMemo(() =>{
console.log('createButtonMonth')
return (<View style={styles.containerForButtons2}>
{
booleanMonth.map((item,key) =>
<View key={item.key} style={styles.buttonFilter3}>
<Button style={styles.buttonFilter3}
title={item.title}
value={item.checked}
onCheckColor='red'
color={item.checked==true ? 'green':'black'}
onPress={()=>onPressMonthFilter(booleanMonth[item.key].key,booleanMonth[item.key].checked)}
/></View>)
}
</View>)
},[booleanMonth])
这是按下按钮功能,它还循环以确定哪个按钮来更改其颜色,因为它的检查状态为真/假(我认为这也会因为循环而减慢我的速度)
const onPressMonthFilter = (keyMonth,statusMonth) =>{
let newArr = [...booleanMonth]
if(newArr[keyMonth].checked==false){
newArr[keyMonth].checked=true
}else{
newArr[keyMonth].checked=false
}
setMonth(newArr)
}
开放任何建议:<请在这里帮助新手