【发布时间】:2019-11-11 05:38:10
【问题描述】:
如何在反应原生平面列表中多选和突出显示组件。我检查了doc。但是任何人都可以帮助我,这有点令人困惑。我已经使用这种方法完成了单选。任何人都可以将其修改为多选。我将在此处给出我已经完成single select的小吃链接@
import * as React from 'react';
import {
Text,
View,
StyleSheet,
FlatList,
TouchableOpacity,
} from 'react-native';
import Constants from 'expo-constants';
const Data = [
{
id: 1,
first_name: 'Sile',
},
{
id: 2,
first_name: 'Clementia',
},
{
id: 3,
first_name: 'Brita',
},
{
id: 4,
first_name: 'Duke',
},
{
id: 5,
first_name: 'Hedvig',
},
{
id: 6,
first_name: 'Paulie',
},
{
id: 7,
first_name: 'Munmro',
},
{
id: 8,
first_name: 'Dyanna',
},
{
id: 9,
first_name: 'Shanta',
},
{
id: 10,
first_name: 'Bambi',
},
];
// or any pure javascript modules available in npm
import { Card } from 'react-native-paper';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedItem: null,
};
}
onPressHandler(id) {
this.setState({ selectedItem: id });
}
render() {
return (
<View>
<FlatList
extraData={this.state.selectedItem} //Must implemented
//horizontal={true}
data={Data}
keyExtractor={item => item.id.toString()}
showsHorizontalScrollIndicator={false}
renderItem={({ item }) => (
<TouchableOpacity onPress={() => this.onPressHandler(item.id)}>
<Card
style={
this.state.selectedItem === item.id
? {
padding: 10,
borderRadius: 5,
backgroundColor: '#000000',
}
: {
padding: 10,
borderRadius: 5,
backgroundColor: '#a1a1a1',
}
}>
<Text>{item.first_name}</Text>
</Card>
</TouchableOpacity>
)}
/>
</View>
);
}
}
const styles = StyleSheet.create({
});
这是样本数据
【问题讨论】:
-
你所说的选择是什么意思,你想将任何类应用于平面列表中的任何项目以突出显示它吗?
-
高亮组件并将id保存到状态。
-
我已根据您的问题编辑了我的答案,请检查。
-
你在哪里编辑过零食或我的问题参考。
-
我创建了新的零食链接,请参考我在其中提到的答案。如果正确,请将其标记为正确答案。
标签: react-native react-native-flatlist