I have a strange issue with the TouchableOpacity
component. I have a MainButton
component which takes 2 props, item
and disabled
. Based on the the disabled
prop I want my MainButton component to apply a different style. The problem is when the TouchableOpacity
component re renders, it does not refresh the style. The prop disabled
is correctly set on re render.
What makes this strange is that if i change it to a TouchableHeighlight
it works as expected.
Does anyone know why? Is this a bug in TouchableOpacity?
import React, { Component } from 'react'
import UI from '../styles/ui'
import {
Text,
TouchableOpacity
} from 'react-native'
const ui = new UI()
const styles = ui.styles
class MainButton extends Component {
constructor (props) {
super(props)
this.state = {
disabled : props.disabled,
item: props.item
}
}
componentWillReceiveProps(props) {
this.setState({disabled:props.disabled})
}
render() {
var normalStyles = [styles.mainButton,styles.widthEighty]
var disabledStyle = [styles.mainButton,styles.widthEighty,styles.lowOpacity]
var correctStyles = this.state.disabled ? disabledStyle : normalStyles
console.log(this.state.disabled,'this.state.disabled ? ');
return (
<TouchableOpacity disabled={this.state.disabled} style={correctStyles} accessibilityLabel={this.state.item.name} onPress={this.state.item.onPress.bind(this)}>
<Text style={styles.mediumLabel}>{this.state.item.name}</Text>
</TouchableOpacity>
);
}
}
export { MainButton as default }
If you use opacity style (which using by TouchableOpacity), you should set this style for children of TouchableOpacity (ex a View) like this: