Reputation: 59
I am using React Native and have it set up so when a TouchableOpacity has been touched the opacity of another TouchableOpacity change and the touched TouchableOpacity has a higher opacity. Looking for how to fix or suggestions for improvement.
let opacityEnglish= true ? 1 : 0.5
let opacitySpanish = false ? 1 : 0.5
const languageSetHandler = (language) => {
if(language == 'English') {
opacityEnglish = true;
opacitySpanish = false;
}
else if (language== 'Spanish') {
opacitySpanish = true;
opacityEnglish = false;
}
setLanguage(language);
}
<TouchableOpacity
style={styles.OtherStyles, {opacity: opacityEnglish}} onPress={() => languageSetHandler('English')}>
<Text>English</Text>
<Text>Has been selected</Text>
</TouchableOpacity>
It has been suggested not to use a boolean for the let. Any Alternative ways to change the opacity from outside the TouchOpacity?
Upvotes: 0
Views: 72
Reputation: 20755
opacityEnglish
& opacitySpanish
are instance variable's. Your languageSetHandler
function changes instance variable's, but React
won't reacts when instance variable changes.
I think you have 2 options here.
language
for your opacity,const languageSetHandler = (language) => {
setLanguage(language);
}
<TouchableOpacity
style={styles.OtherStyles, {opacity: language === 'English' ? 1 : 0.5}}
onPress={() => languageSetHandler('English')}
>
<Text>English</Text>
<Text>Has been selected</Text>
</TouchableOpacity>
You can do same for Spanish
.
const [opacityEnglish, setOpacityEnglish] = useState(0.5); //You can set initial opacity to 1 as per your need
const [opacitySpanish, setOpacitySpanish] = useState(0.5);
const languageSetHandler = (language) => {
if(language == 'English') {
setOpacityEnglish(1);
setOpacitySpanish(0.5);
}
else if (language== 'Spanish') {
setOpacityEnglish(0.5);
setOpacitySpanish(1);
}
setLanguage(language);
}
<TouchableOpacity
style={styles.OtherStyles, {opacity: opacityEnglish}}
onPress={() => languageSetHandler('English')}
>
<Text>English</Text>
<Text>Has been selected</Text>
</TouchableOpacity>
Upvotes: 2
Reputation: 27245
let opacityEnglish= true ? 1 : 0.5
This will always resolve to 1, because true
is always true.
I think you want something more like:
let opacity = language === 'english' ? 1 : 0.5
;
Upvotes: 2