【问题标题】:How to change button on pressed color in multiple buttons React Native如何在多个按钮 React Native 中更改按下颜色的按钮
【发布时间】:2018-01-25 12:57:56
【问题描述】:

我的 react native 应用中有 3 个按钮。当用户单击按钮 1 时,我需要将其颜色更改为橙​​色。但其他按钮应具有默认颜色(灰色)。如果用户下次单击按钮 3,颜色应变为橙色,但第一个按钮颜色应重置为默认值。我对原生反应完全陌生,这就是我尝试过的。但它适用于所有按钮。我知道如果我可以拥有多个具有唯一 Id 的状态,则可以完成。但是我不知道方法。

<Text style={ styles.switchButtonsTitle }>Choose Type of User</Text>
<TouchableOpacity onPress={(userType) =>
    this.selectionOnPress("BASIC")} >
    <Text style={_style}>
        <Text style={styles.switchButtonsText}>BASIC</Text>
    </Text>
</TouchableOpacity>


<TouchableOpacity onPress={(userType) =>
    this.selectionOnPress("INTERMEDIATE")}>
    <Text style={_style}>
        <Text style={styles.switchButtonsText}>INTERMEDIATE</Text>
    </Text>
</TouchableOpacity>

<TouchableOpacity onPress={(userType) =>
    this.selectionOnPress("ADVANCED")}>
    <Text style={{backgroundColor: this.state.backgroundColor}}>
        <Text style={styles.switchButtonsText}>ADVANCED</Text>
    </Text>
</TouchableOpacity>

selectionOnPress

selectionOnPress(userType) {
    this.setState({
        onClicked: true
    });
} 

道具

constructor(props) {
    super(props);
    this.state = {
        onClicked: false
    }
    this.selectionOnPress = this.selectionOnPress.bind(this)
}

渲染(不添加所有代码,只添加对本帖有用的代码)

render() {
    var _style;
    if (this.state.onClicked) { // clicked button style
        _style = {
            backgroundColor: "red"
        }
    }
    else { // default button style
        _style = {
            backgroundColor: "blue"
        }
    }

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    我对你的代码做了一些修改

     export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = { selectedButton: null };
        this.selectionOnPress = this.selectionOnPress.bind(this);
    }
    
    selectionOnPress(userType) {
        this.setState({ selectedButton: userType });
    }
    
    render() {
        return (
            <View>
                <Text style={styles.switchButtonsTitle}>
                    Choose Type of User
                </Text>
                <TouchableOpacity
                    onPress={() => this.selectionOnPress("BASIC")}
                >
                    <Text
                        style={{
                            backgroundColor:
                                this.state.selectedButton === "BASIC"
                                    ? "red"
                                    : "grey"
                        }}
                    >
                        <Text style={styles.switchButtonsText}>BASIC</Text>
                    </Text>
                </TouchableOpacity>
    
                <TouchableOpacity
                    onPress={() => this.selectionOnPress("INTERMEDIATE")}
                >
                    <Text
                        style={{
                            backgroundColor:
                                this.state.selectedButton === "INTERMEDIATE"
                                    ? "red"
                                    : "grey"
                        }}
                    >
                        <Text style={styles.switchButtonsText}>
                            INTERMEDIATE
                        </Text>
                    </Text>
                </TouchableOpacity>
    
                <TouchableOpacity
                    onPress={() => this.selectionOnPress("ADVANCED")}
                >
                    <Text
                        style={{
                            backgroundColor:
                                this.state.selectedButton === "ADVANCED"
                                    ? "red"
                                    : "grey"
                        }}
                    >
                        <Text style={styles.switchButtonsText}>
                            INTERMEDIATE
                        </Text>
                    </Text>
                </TouchableOpacity>
            </View>
        );
    }
    }
    
    
    ... don't forget to define your styles
    

    【讨论】:

    • 嗨阿里,非常感谢您的支持。我还需要调用 selectionOnPress 函数。你能帮我在这里怎么称呼它吗?
    • 从您那里学到了很多东西。这个答案将对所有反应原生的新手有所帮助..谢谢兄弟
    • 我需要在这段代码中添加文本颜色,例如 ( )背景颜色,你能帮帮我吗?
    【解决方案2】:

    首先我建议您创建一个按钮组件。 https://medium.com/the-react-native-log/organizing-a-react-native-project-9514dfadaa0

    一个简单的方法是像这样为每个按钮创建一个状态

    <TouchableOpacity onPress={
            (userType) => this.selectionOnPress("BASIC");
            this.setState({backgroundColor1: this.state.backgroundColor1 == 'grey'? 'orange' : 'grey'});
    }>
        <Text style={{backgroundColor: this.state.backgroundColor1}}>
            <Text style={styles.switchButtonsText}>BASIC</Text> 
        </Text>
    </TouchableOpacity>
    
    <TouchableOpacity onPress={
        (userType) => this.selectionOnPress("INTERMEDIATE");
        this.setState({backgroundColor2: this.state.backgroundColor2 == 'grey'? 'orange' : 'grey'});
    }>
        <Text style={{backgroundColor: this.state.backgroundColor2}>
            <Text style={styles.switchButtonsText}>INTERMEDIATE</Text> 
        </Text>
    </TouchableOpacity>
    
    <TouchableOpacity onPress={
        (userType) => this.selectionOnPress("ADVANCED");
        this.setState({backgroundColor3: this.state.backgroundColor3 == 'grey'? 'orange' : 'grey', backgroundColor1: 'grey'});
    }>
        <Text style={{backgroundColor: this.state.backgroundColor}}>
            <Text style={styles.switchButtonsText}>ADVANCED</Text> 
        </Text>
    </TouchableOpacity>
    

    【讨论】:

      【解决方案3】:

      简化示例:

      //jsx
      // asign default class name to your buttons with desired default color,
      // onclick change said class to active css class which will have different background color
         <div>
          <button onClick={this.handleClick} className='btn-default'>basic</button>
          <button onClick={this.handleClick} className='btn-default'>intermediate</button>
          <button onClick={this.handleClick} className='btn-default'>advance</button>
        </div>
      
      //js
      // this method select parent element of your button which is also parent
      // element for other buttons and then gets all other buttons in button 
      // variable via children property
        handleClick(event) {
          const buttons = event.target.parentElement.children;
          for(let i = 0; i < buttons.length; i++) {
              //here you set all buttons to default color
              buttons[i].classList.add('btn-default');
              buttons[i].classList.remove('btn-active');
          }
          //here you add active class(color) to button you originally clicked
          event.target.classList.add('btn-active');
        }
      
        //css
      
      .btn-default {
         background-color: grey;
       }
      
      .btn-active {
         background-color: orange;
       }
      

      【讨论】:

      • 问题是反应原生
      猜你喜欢
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 2019-10-13
      • 2020-04-20
      • 1970-01-01
      • 2021-05-23
      • 2023-01-28
      • 2012-07-05
      相关资源
      最近更新 更多