react native 之 FlatList基本使用

常规用法,单行渲染数据

1.自定义CKFlatList.js 组件类

 1 import React,{Component} from 'react';
 2 import {
 3     Text,
 4     StyleSheet,
 5     FlatList,
 6     TouchableOpacity,
 7     Dimensions
 8 } from 'react-native';
 9 
10 const screenW=Dimensions.get('window').width;//获取屏幕宽度
11 
12 export default class CKFlatList extends Component{
13     constructor(){
14         super();
15         //模拟数据源
16         this.state={
17             dataSource:[
18                 '第一行数据',
19                 '第二行数据',
20                 '第三行数据',
21                 '第四行数据',
22                 '第五行数据',
23                 '第六行数据',
24                 '第七行数据',
25                 '第八行数据',
26                 '第九行数据'
27             ]
28         }
29     }
30     render(){
31         return(
32             <FlatList
33                 data={this.state.dataSource}
34                 renderItem={({item,index})=>this._renderRow(item,index)}
35                 keyExtractor={(item,index)=>item+index}
36             />
37         )
38     }
39     _renderRow(item,index){
40         return(
41             <TouchableOpacity
42                 style={{
43                     width:screenW,
44                     height:40,
45                     borderBottomWidth:1,
46                     borderBottomColor:'red',
47                     justifyItems:'center',
48                     alignItems:'center'
49                 }}
50             >
51                 <Text>{item}</Text>
52             </TouchableOpacity>
53         )
54     }
55 }
56 
57 const styles=StyleSheet.create({
58 
59 });

2.App.js引用组件

 1 /**
 2  * Sample React Native App
 3  * https://github.com/facebook/react-native
 4  *
 5  * @format
 6  * @flow strict-local
 7  */
 8 
 9 import React from 'react';
10 import {
11   SafeAreaView,
12   StyleSheet,
13   ScrollView,
14   View,
15   Text,
16   StatusBar,
17 } from 'react-native';
18 
19 import {
20   Header,
21   LearnMoreLinks,
22   Colors,
23   DebugInstructions,
24   ReloadInstructions,
25 } from 'react-native/Libraries/NewAppScreen';
26 
27 import CKFlatList from './components/CKFlatList'
28 
29 
30 const App: () => React$Node = () => {
31 
32   return (
33     <>
34       <StatusBar barStyle="dark-content" />
35       <SafeAreaView style={styles.mainViewStyle}>
36       <CKFlatList/>
37       </SafeAreaView>
38     </>
39   );
40 };
41 
42 
43 const styles=StyleSheet.create({
44   mainViewStyle:{
45       flex:1,
46       backgroundColor:'#fff',
47   }
48 });
49 
50 
51 
52 export default App;

常规用法,多列渲染数据

1.创建自定义CKFlatList.js组件类

 1 import React,{Component} from 'react';
 2 import {
 3     Text,
 4     StyleSheet,
 5     FlatList,
 6     TouchableOpacity,
 7     Dimensions
 8 } from 'react-native';
 9 
10 const screenW=Dimensions.get('window').width;
11 
12 export default class CKFlatList extends Component{
13     constructor(){
14         super();
15         //模拟数据源
16         this.state={
17             dataSource:[
18                 '第一行数据',
19                 '第二行数据',
20                 '第三行数据',
21                 '第四行数据',
22                 '第五行数据',
23                 '第六行数据',
24                 '第七行数据',
25                 '第八行数据',
26                 '第九行数据',
27                 '第一行数据',
28                 '第二行数据',
29                 '第三行数据',
30                 '第四行数据',
31                 '第五行数据',
32                 '第六行数据',
33                 '第七行数据',
34                 '第八行数据',
35                 '第九行数据'
36             ]
37         }
38     }
39     render(){
40         return(
41             <FlatList
42                 data={this.state.dataSource}
43                 renderItem={({item,index})=>this._renderRow(item,index)}
44                 keyExtractor={(item,index)=>item+index}
45                 style={{
46                     width:screenW,
47                     flexDirection:'row',
48                     flexWrap:'wrap'
49                 }}
50                 numColumns={4}
51             />
52         )
53     }
54     _renderRow(item,index){
55         return(
56             <TouchableOpacity
57                 style={{
58                     width:100,
59                     height:200,
60                     borderBottomWidth:1,
61                     borderBottomColor:'red',
62                     justifyItems:'center',
63                     alignItems:'center'
64                 }}
65                 onPress={()=>alert('点击了第'+(index+1)+'行')}
66             >
67                 <Text>{item}</Text>
68             </TouchableOpacity>
69         )
70     }
71 }
72 
73 const styles=StyleSheet.create({
74 
75 });

2.结果如图

 

posted @ 2021-01-10 20:38  创客未来  阅读(1041)  评论(0编辑  收藏  举报