【问题标题】:toggle background color of multiple buttons individually分别切换多个按钮的背景颜色
【发布时间】:2020-09-14 03:50:44
【问题描述】:

我正在使用地图一次渲染多个按钮。我希望当我按下一个按钮时改变它的背景颜色,但是现在当我按下一个按钮时,所有按钮的颜色都会改变。我可以为每个按钮创建状态以查看它是否被选中,但如果我有大量不实用的按钮。有什么解决方法吗?

 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,它们的按钮颜色都会改变,但其余的保持不变。颜色可以多次按下切换

【问题讨论】:

    标签: react-native button react-hooks state render


    【解决方案1】:
    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>
        ));
    

    【讨论】:

    • 这个方案一次只能选择一个项目,这是作者的本意吗?
    • @MorKadosh 我想同时选择多个按钮
    • 此解决方案不允许我在多次按下的颜色之间切换
    • 谢谢,编辑后的解决方案正是我想要的
    猜你喜欢
    • 2013-06-07
    • 2021-03-28
    • 2011-03-05
    • 2017-08-19
    • 2021-02-10
    • 2020-12-17
    • 1970-01-01
    • 2012-09-05
    • 2021-04-27
    相关资源
    最近更新 更多