Лучший способ изменить цвет фона с помощью троичного оператора - PullRequest
0 голосов
/ 23 октября 2018

В настоящее время я использую функцию для переключения hasBeenClicked, затем я использую условие, чтобы убедиться, что цвет фона изменяется только тогда, когда hasBeenClicked имеет значение true.Я бы предпочел использовать троичный оператор внутри опоры стиля для обработки логики.

    let randomHex = () => {


  let letters = '0123456789ABCDEF';
  let color = '#';
  for (let i = 0; i < 6; i++) {
    color += letters[Math.floor(Math.random() * 16)];
    // console.log('here is your random hex color', color);
  }
  return color;

}

export default class App extends Component {
  constructor() {
    super()
    this.state = {
      hasBeenClicked: false

    }
  }


  changeColor = () => {
    this.setState({
      hasBeenClicked: !this.state.hasBeenClicked
    })
    if (this.state.hasBeenClicked === true) {
      this.setState({
        backgroundColor: randomHex()
      })
    }


  }
  render() {
    return (
      <View style={[styles.container, { backgroundColor: this.state.backgroundColor }]}>
        <TouchableOpacity
          onPress={this.changeColor}
        >
          <Text style={styles.welcome}>
            Welcome to React Native!
        </Text>
        </TouchableOpacity>


      </View>
    );
  }
}

Я пытался

<View style={[styles.container, { backgroundColor: {this.state.hasBeenClicked: this.state.backgroundColor ? 'green'} }]}>

Какой лучший / правильный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Ваша троица неверна:

{ this.state.hasBeenClicked : this.state.backgroundColor ? 'green'}

должно быть

{ this.state.hasBeenClicked ? this.state.backgroundColor : 'green'}

0 голосов
/ 23 октября 2018

Один из способов - создать 2 разных CSS-класса с разными цветами фона.Например,

.red: {
  background: 'red'
}
.blue: {
  background: 'blue'
}

Теперь в вашем <View /> вы можете назначать классы динамически на основе вашего значения this.state.hasbeenClicked.Например,

render(){
  const className = this.state.hasBeenClicked ? 'blue' : 'red'
  return(
    <View className={className}>
      // rest of your code
    </View>
  )
}
...