for(var i = 0; 2*i < this.state.showMember.length; i++) {
<View style={{flex: 1, flexDirection: 'row'}}>
<TouchableHighlight key={"home "+this.state.members[2*i]}
underlayColor= { this.state.showMember[2*i] ? this.state.memberColors[(2*i)% this.state.memberColors.length] : Colors.hideScheduleColor }
style={{
backgroundColor: this.state.showMember[2*i] ? this.state.memberColors[(2*i) % this.state.memberColors.length] : Colors.hideScheduleColor}}
onPress={()=>{
let newShowMember = this.state.showMember;
newShowMember[2*i] = !newShowMember[2*i];
this.setState({showMember: newShowMember});
}}>
<Text>{ this.state.members[2*i] }</Text>
</TouchableHighlight>
<TouchableHighlight key={"home "+this.state.members[(2*i)+1]}
underlayColor= { this.state.showMember[(2*i)+1] ? this.state.memberColors[((2*i)+1)% this.state.memberColors.length] : Colors.hideScheduleColor }
style={{
backgroundColor: this.state.showMember[(2*i)+1] ? this.state.memberColors[((2*i)+1) % this.state.memberColors.length] : Colors.hideScheduleColor}}
onPress={()=>{
let newShowMember = this.state.showMember;
newShowMember[(2*i)+1] = !newShowMember[(2*i)+1];
this.setState({showMember: newShowMember});
}}>
<Text>{ this.state.members[(2*i)+1] }</Text>
</TouchableHighlight>
</View>
}
Выше приведен фрагмент кода из моего приложения.Я пытаюсь заставить фон TouchableHighlight
менять цвет при каждом нажатии.При этом у меня есть 3 массива:
showMember
: хранит информацию о том, будет ли отображаться имя участника или нет memberColors
: хранит назначенный цвет для каждого участника members
: хранит имя членов
Так что я настраиваю цвета фона и подложки TouchableHightlight
s для изменения в соответствии со значением showMember
для этогочлен, и имеют функции onPress
для изменения значения showMember
для этого члена.
Поскольку я слышал, что это не «способ реагирования» для прямого изменения значений состояния, поэтому я создаю временнуюмассив с измененным логическим значением для выбранного члена, затем устанавливающий состояние showMember
для этого временного массива.
Однако из журналов я обнаружил, что создание этого временного массива будет добавлять новую запись каждый раз, когда янажмите на любого из участников.Я запутался в этом, потому что я просто делаю let newShowMember = this.state.showMember
, и это скопирует массив из значения состояния и добавит в него новую запись.
Почему это странное поведение происходит и каковы некоторые способыобойти это?