2016-08-25 4 views
1

Я создал компонент React Native, который завершает элемент Touchable и принимает цвет темы в качестве опоры. Различные темы делают цвет фона кнопки другим. Сейчас у меня есть, если заявление в функции визуализации, которая проверяет пропеллер и выбирает стиль соответственно:Создание кнопки с динамическим цветом фона в React Native

render() { 
    var bgColor; 
    if (this.props.theme === 'blue') { 
    bgColor = styles.blueBg; 
    } 
    else if (this.props.theme === 'red') { 
    bgColor = styles.redBg; 
    } 

    // (...) 

    return (
    <TouchableHighlight style={[styles.button, bgColor]}> 
    {/* ... */} 
    </TouchableHighlight> 
); 
} 

const styles = StyleSheet.create({ 
    // ... 
    blueBg: { 
    backgroundColor = 'blue' 
    }, 
    redBg: { 
    backgroundColor = 'red' 
    }, 
}); 

Является ли это правильный способ сделать это? Должен ли я переместить мои инструкции if в другое место? Есть ли другой подход к этому?

ответ

1
Rather than doing this what about : 

super(props); 
this.state = {bgColor : (this.props.theme === 'blue')? styles.blueBg : styles.redBg}; 

render(){ 
return (
<TouchableHighlight style={[styles.button,this.state.bgColor]}> 
    {/* ... */} 
    </TouchableHighlight> 

) 
} 
+0

Хорошо, кажется разумным, чтобы тема была задана при инициализации, так как рендер можно назвать много раз. Однако было бы больше тем, поэтому я бы не использовал тройной оператор. – nbkhope

Смежные вопросы