单独切换多个按钮的背景颜色
toggle background color of multiple buttons individually
我正在使用地图一次呈现多个按钮。我想让一个按钮的背景颜色在我按下时改变,但现在当我按下一个按钮时,所有按钮的颜色都会改变。我可以为每个按钮创建状态以查看它是否被选中,但如果我有大量按钮则不实用。有什么解决方法吗?
const [selected, setSelected] = React.useState(false);
const genres = ["Adventure", "Arts", "Leisure", "Nature"];
const onSelect = () => setSelected(!selected);
buttons = () =>
genres.map((items) => (
<TouchableOpacity
key={items}
onPress={() => onSelect()}
style={[
styles.button,
{ backgroundColor: selected ? "#00cc00" : "#f2f2f2" },
]}
>
<Text style={{ fontSize: 18 }}>{items}</Text>
</TouchableOpacity>
));
编辑:我想同时选择多个按钮。如果我点击 Adventure 和 Leisure,它们的按钮颜色都会改变,但其余部分保持不变。可以多次按下来切换颜色
const [selected, setSelected] = React.useState(null);
const genres = ['Adventure', 'Arts', 'Leisure', 'Nature'];
buttons = () =>
genres.map(item => (
<TouchableOpacity
key={item}
onPress={() => setSelected(item)}
style={[styles.button, { backgroundColor: item === selected ? '#00cc00' : '#f2f2f2' }]}
>
<Text style={{ fontSize: 18 }}>{items}</Text>
</TouchableOpacity>
));
编辑:多选
const [selected, setSelected] = React.useState([]);
const genres = ['Adventure', 'Arts', 'Leisure', 'Nature'];
const handlePress = genre =>
selected.includes(genre) ? setSelected(selected.filter(s => s !== genre)) : setSelected([...selected, genre]);
buttons = () =>
genres.map(item => (
<TouchableOpacity
key={item}
onPress={() => handlePress(item)}
style={[styles.button, { backgroundColor: selected.includes(genre) ? '#00cc00' : '#f2f2f2' }]}
>
<Text style={{ fontSize: 18 }}>{items}</Text>
</TouchableOpacity>
));
我正在使用地图一次呈现多个按钮。我想让一个按钮的背景颜色在我按下时改变,但现在当我按下一个按钮时,所有按钮的颜色都会改变。我可以为每个按钮创建状态以查看它是否被选中,但如果我有大量按钮则不实用。有什么解决方法吗?
const [selected, setSelected] = React.useState(false);
const genres = ["Adventure", "Arts", "Leisure", "Nature"];
const onSelect = () => setSelected(!selected);
buttons = () =>
genres.map((items) => (
<TouchableOpacity
key={items}
onPress={() => onSelect()}
style={[
styles.button,
{ backgroundColor: selected ? "#00cc00" : "#f2f2f2" },
]}
>
<Text style={{ fontSize: 18 }}>{items}</Text>
</TouchableOpacity>
));
编辑:我想同时选择多个按钮。如果我点击 Adventure 和 Leisure,它们的按钮颜色都会改变,但其余部分保持不变。可以多次按下来切换颜色
const [selected, setSelected] = React.useState(null);
const genres = ['Adventure', 'Arts', 'Leisure', 'Nature'];
buttons = () =>
genres.map(item => (
<TouchableOpacity
key={item}
onPress={() => setSelected(item)}
style={[styles.button, { backgroundColor: item === selected ? '#00cc00' : '#f2f2f2' }]}
>
<Text style={{ fontSize: 18 }}>{items}</Text>
</TouchableOpacity>
));
编辑:多选
const [selected, setSelected] = React.useState([]);
const genres = ['Adventure', 'Arts', 'Leisure', 'Nature'];
const handlePress = genre =>
selected.includes(genre) ? setSelected(selected.filter(s => s !== genre)) : setSelected([...selected, genre]);
buttons = () =>
genres.map(item => (
<TouchableOpacity
key={item}
onPress={() => handlePress(item)}
style={[styles.button, { backgroundColor: selected.includes(genre) ? '#00cc00' : '#f2f2f2' }]}
>
<Text style={{ fontSize: 18 }}>{items}</Text>
</TouchableOpacity>
));