Я пытаюсь сделать звездочку рейтинговой составляющей. Я использую тернарные операторы, чтобы проверить, является ли состояние истинным или нет. Если да, я использую желтую звезду или белую. Однако это похоже на плохую практику кода. Можно ли вместо того, чтобы повторять все эти тернарные операторы, каким-то образом объединить условия и отобразить только те желтые звезды, состояние которых истинно?
const [oneStar, setOneStar] = useState(false);
const [twoStar, setTwoStar] = useState(false);
const [threeStar, setThreeStar] = useState(false);
const [fourStar, setFourStar] = useState(false);
const [fiveStar, setFiveStar] = useState(false);
const ratings = [
1,2,3,4,5
]
const setRating = (rating: number) => {
console.log('rating', rating);
if(rating == 1){
setOneStar(true);
setTwoStar(false);
setThreeStar(false);
setFourStar(false);
setFiveStar(false);
}
if(rating == 2){
setOneStar(true);
setTwoStar(true);
setThreeStar(false);
setFourStar(false);
setFiveStar(false);
}
if(rating == 3){
setOneStar(true);
setTwoStar(true);
setThreeStar(true);
setFourStar(false);
setFiveStar(false);
}
if(rating == 4){
setOneStar(true);
setTwoStar(true);
setThreeStar(true);
setFourStar(true);
setFiveStar(false);
}
if(rating == 5){
setOneStar(true);
setTwoStar(true);
setThreeStar(true);
setFourStar(true);
setFiveStar(true);
}
};
return (
<View style={styles.ratingContainer}>
<TouchableOpacity onPress={() => setRating(1)}>
{oneStar ?
<Icon name= "star" color='#ebba34' size={moderateScale(13)} /> : <Icon name= "star-o" size={moderateScale(13)} />}
</TouchableOpacity>
<TouchableOpacity onPress={() => setRating(2)}>
{twoStar ?
<Icon name= "star" color='#ebba34' size={moderateScale(13)} /> : <Icon name= "star-o" size={moderateScale(13)} />}
</TouchableOpacity>
<TouchableOpacity onPress={() => setRating(3)}>
{threeStar ?
<Icon name= "star" color='#ebba34' size={moderateScale(13)} /> : <Icon name= "star-o" size={moderateScale(13)} />}
</TouchableOpacity>
<TouchableOpacity onPress={() => setRating(4)}>
{fourStar ?
<Icon name= "star" color='#ebba34' size={moderateScale(13)} /> : <Icon name= "star-o" size={moderateScale(13)} />}
</TouchableOpacity>
<TouchableOpacity onPress={() => setRating(5)}>
{fiveStar ?
<Icon name= "star" color='#ebba34' size={moderateScale(13)} /> : <Icon name= "star-o" size={moderateScale(13)} />}
</TouchableOpacity>
</View>
);
};