привет @shivam tiwari это может быть достигнуто разными способами. тем, что одним из лучших методов является использование функции .map со стилями родительского представления flexdirection: row и flexWrap: 'wrap'
также принимают логическое значение, выбранное для каждого элемента в массиве, изначально равным false, и обновляютконкретный элемент в true или false в зависимости от выбора.
Пожалуйста, проверьте ниже пример:
let industries = this.state.industries
for (let i = 0; i < industries.length; i++) {
industries[i].selected = false
}
this.setState({industries: industries})
<View style={{ flexDirection: 'row', flexWrap: 'wrap', margin: 10, marginTop: 5 }}>
{this.renderIndustry(this.state.preferredIndustry)}
и в методе renderIndustry вы можете сделать .map функциональность, такую как
//RENDER INDUSTRY
renderIndustry(data) {
if (data.length === 0) {
return null
}
return data.map((item, index) => {
return (
<CardView
key={item.industryname}
style={[styles.cardView, { backgroundColor: item.selected ? '#4291E2' : '#F9FAFB', borderWidth: 1, borderColor: item.selected ? '#4291E2' : '#E0E8F1' }]}
cardElevation={item.selected ? 3 : 0}
cardMaxElevation={5}
cornerRadius={10}
cornerOverlap={false}
>
<TouchableWithoutFeedback onPress={() => { this.selectIndustry(item, index) }}>
<View style={{
alignItems: 'center',
justifyContent: 'center',
height: '100%',
width: '100%',
backgroundColor: '#0000'
}}>
<Text style={{ fontSize: 14, color: item.selected ? '#fff' : '#000', margin: 15 }}>{item.industryname}</Text>
</View>
</TouchableWithoutFeedback>
</CardView>
);
});
}
и в onPress измените значение выбранного на true или false на основе предыдущего значения, например ....
//SELECT INDUSTRY
selectIndustry = (item, index) => {
let industries = this.state.industries
for (let i = 1; i <= industries.length; i++) {
if (industries[i - 1].industryid === item.industryid) {
industries[i - 1].selected = !industries[i - 1].selected
}
}
this.setState({ industries: industries })
}
НАДЕЖДА, это помогает .... Счастливое кодирование !!