【发布时间】:2021-09-28 23:20:30
【问题描述】:
我有一个元素数组并创建一个列表。它们都是一样的,我想改变被触摸的项目的颜色。在地图中创建它们时,我得到相同的状态并且它们都改变了颜色。
我只希望被触摸的项目改变颜色
颜色状态:
const [myColorItem, setMyColorItem] = useState('#fff');
创建一个列表项:
let Arr = data.hours.map((item, i) => {
return <Item key={i} myId={i} hour={item.hour} isBusy={item.isBusy}/>
})
项目是:
<TouchableOpacity
style={{ backgroundColor: myColorItem }}
onPress={() =>hourSelected(hour)}>
<Text style={styles.textStyle_hour} >{hour}</Text>
<Text style={{color: '#cacaca'}}>Disponible</Text>
</TouchableOpacity>
方法是:
const hourSelected = (hour) => {
console.log('hora selec '+hour);
setMyColorItem('#00acba');
};
更新 感谢您的反馈。他们帮助我编写了代码。
新变量:
const [itemSelectedList, setItemSelectedList] = useState([false,false,false,false,false,false,false,false,false])
const hourSelected = (myId, hour) => {
console.log('hora selec '+hour);
let selectedList = [...itemSelectedList];
selectedList[myId] = !selectedList[myId];
setItemSelectedList(selectedList);
};
和触摸按钮
<TouchableOpacity
style={{ backgroundColor: itemSelectedList[myId] ? '#00acba' : '#ffffff' }}
onPress={() =>hourSelected(hour)}>
<Text style={styles.textStyle_hour} >{hour}</Text>
<Text style={{color: '#cacaca'}}>Disponible</Text>
</TouchableOpacity>
【问题讨论】:
标签: reactjs list state touch native