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 }
I don't have enough context to understand exactly what you try to achieve here but try this:
There is also not enough context on what 'this.state.item.onPress' do, or why you use an item you pass in the props in order to change the props on the first place. It sounds like you can improve the way you implemented this, if you give me more context I might be able to help.