【发布时间】:2021-01-28 09:37:57
【问题描述】:
所以我使用 React useState 中的循环创建了按钮
const [booleanMonth,setMonth]=useState([
{key:0,value:'January',color:'black'},
{key:1,value:'February',color:'black'},
{key:2,value:'March',color:'black'},
{key:3,value:'April',color:'black'},
{key:4,value:'May',color:'black'},
{key:5,value:'June',color:'black'},
{key:6,value:'July',color:'black'},
{key:7,value:'August',color:'black'},
{key:8,value:'September',color:'black'},
{key:9,value:'October',color:'black'},
{key:10,value:'November',color:'black'},
{key:11,value:'December',color:'black'}
])
const createButtonMonth = () =>{
return (<View style={styles.containerForButtons2}>
{
booleanMonth.map((item,key) =>
<View key={item.key} style={styles.buttonFilter3}><Button key={item.key} title={item.value} color={item.color} value={item.value}
onPress={()=>onPressMonthFilter(item.key)}/></View>)
}
</View>)
}
然后为了改变按钮的颜色,我使用这个函数来切换按钮的颜色
const onPressMonthFilter = (keymonth) =>{
if(booleanMonth[keymonth].color=='black'){
booleanMonth[keymonth].color='green'
setMonth(booleanMonth)
}else{
booleanMonth[keymonth].color='black'
setMonth(booleanMonth)
}
}
按下按钮的颜色不会立即改变,但是当我关闭一些随机模式或执行我创建的刷新功能时,按钮的颜色就会改变。 我不知道会发生什么,也不知道如何解决。
编辑:我正在使用它,它会立即更改按钮,这很奇怪,而不是我想要的解决方案,我不想循环
const onPressMonthFilter = (keymonth) =>{
let monthChecked = []
for(var i = 0 ; i<booleanMonth.length ; i ++){
if(booleanMonth[i].key == keymonth){
if(booleanMonth[i].color == 'green'){
booleanMonth[i].color = 'black'
}else{
booleanMonth[i].color = 'green'
}
}
monthChecked.push(booleanMonth[i])
}
setMonth(monthChecked)
}
【问题讨论】:
-
你正在直接改变对象,这意味着 React 不知道更改,因为它只是检查对象是否相等。所有 React 看到的都是和以前一样的对象。因此,在正确更改其他内容之前,它不会重新渲染。每当您更改某些内容时,请使用这些更改创建一个新对象并将其传入。
标签: reactjs react-native button use-state