从零开始学习React Native,先重布局开始学起

前端之家收集整理的这篇文章主要介绍了从零开始学习React Native,先重布局开始学起前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

React Native布局学习,模仿携程的首页内容,可以很好的让我们练习一下flexBox布局,最后完成的效果图如下:

附上Github地址,欢迎star

一、布局主要内容如下:

1、搜索栏的布局
2、图片轮播
3、类似九宫格的布局
4、图片文字混合布局
5、底部布局

主要使用的控件

StyleSheet
Text
PixelRatio
ScrollView
Image
View
TextInput

记得导出与引用

导出单独的样式

  1. module.exports= Search;

在主文件中使用

  1. const Search = require('./search');

二、搜索栏布局实现

  1. class Search extends Component {
  2. render() {
  3. return (
  4. <View style={styles.sub_searchView}>
  5. <View style={styles.searchBarView}>
  6. <Image source={require('./imgs/search_icon.png')}
  7. style={{height:18,width:18,alignSelf:'center',marginLeft:5} } />
  8. <TextInput
  9. autoCapitalize="none"
  10. autoCorrect={false}
  11. placeholder="搜索:目的地/景点/酒店/关键字/航班号"
  12. style={styles.searchBarInput}
  13. />
  14. <Image source={require('./imgs/voice_icon.png')}
  15. style={{height:18,marginLeft:0} } />
  16. </View>
  17. <View style={styles.messageView}>
  18. <Image source={require('./imgs/message_icon.png')}
  19. style={{height:22,width:22} } />
  20. </View>
  21. </View>
  22. );
  23. }

具体的样式见源代码

三、图片轮播

这里使用了开源的组件react-native-swiper
Github项目地址,里面有具体的使用介绍
记得安装完后,重新启动一下package,不然会报错
下面是安装的代码,具体见Github

  1. $ npm i react-native-swiper --save
  1. <Swiper style={styles.wrapper} showsButtons={false} autoplay={true} height={80}
  2. activeDot = {<View style={{backgroundColor:'#1EA0DB',width: 8,height: 8,borderRadius: 4,marginLeft: 3,marginRight: 3,marginTop: 3,marginBottom: 3,}} />}
  3. scrollsToTop={true}
  4. >
  5. <Image style={[styles.slideView,]} source={{uri:slideImages[0]}}/>
  6. <Image style={[styles.slideView,]} source={{uri:slideImages[1]}}/>
  7. <Image style={[styles.slideView,]} source={{uri:slideImages[2]}}/>
  8. <Image style={[styles.slideView,]} source={{uri:slideImages[3]}}/>
  9. <Image style={[styles.slideView,]} source={{uri:slideImages[4]}}/>
  10. </Swiper>

具体的样式见源代码

四、类似九宫格的布局

  1. <View style={[styles.sbu_view,styles.sub_red]}>
  2.  
  3. <View style={[styles.item,styles.sub_icon_flex]}>
  4.  
  5. <View style={[styles.sub_icon_flex]}>
  6. <Text style={styles.font}>酒店</Text>
  7. </View>
  8.  
  9. <View style={[styles.sub_flex,styles.sub_icon_flex]}>
  10. <Image source={{uri:Icons[0]}} style={styles.sub_icon_img}></Image>
  11. </View>
  12.  
  13. </View>
  14.  
  15. <View style={[styles.item,styles.lineLeftRight]}>
  16.  
  17. <View style={[styles.sub_flex,styles.sub_icon_flex,styles.lineCenter]}>
  18. <Text style={styles.font}>海外酒店</Text>
  19. </View>
  20.  
  21. <View style={[styles.sub_flex,styles.sub_icon_flex]}>
  22. <Text style={styles.font}>特惠酒店</Text>
  23. </View>
  24.  
  25. </View>
  26.  
  27. <View style={styles.item}>
  28.  
  29. <View style={[styles.sub_flex,styles.lineCenter]}>
  30. <Text style={styles.font}>团购</Text>
  31. </View>
  32.  
  33. <View style={[styles.sub_flex,styles.sub_icon_flex]}>
  34. <Text style={styles.font}>民宿·客栈</Text>
  35. </View>
  36.  
  37. </View>
  38. </View>

具体的样式见源代码

五、图片文字混合布局

  1. <View style={styles.sub_subject_sup_contentView}>
  2.  
  3. <View style={styles.sub_supImgView}>
  4. <Image source={{uri:subject_supImages[0]}} style={styles.sub_subject_sup_img}/>
  5. <View style={[styles.color_grey]}>
  6. <Text style={styles.sub_sup_fontSize}>
  7. 美食之旅·呼和浩特+希拉穆仁草原+响沙湾+鄂尔多斯...
  8. </Text>
  9.  
  10. <View style={styles.sub_sup_priceView}>
  11. <Text style={styles.sub_price_fontSize}>
  12. ¥2899起
  13. </Text>
  14.  
  15. <View style={styles.sub_sup_priceChildView}>
  16. <Text style={styles.sub_sup_fontSize}>
  17. 省¥1100
  18. </Text>
  19. </View>
  20. </View>
  21. </View>
  22. </View>
  23.  
  24.  
  25. <View style={styles.sub_supImgView}>
  26.  
  27. <View style={[styles.sub_sup_right_top,styles.color_grey,styles.sub_sup_borderBottom]}>
  28. <View style={{flex: 2}}>
  29. <Text style={[styles.sub_price_fontSize,{marginTop: 10,marginLeft: 5,fontWeight: 'bold',color: '#FA5267'}]}>
  30. 千款特价
  31. </Text>
  32. <Text style={{fontSize: 12,marginLeft: 5}}>
  33. 走过路过不错过
  34. </Text>
  35. </View>
  36.  
  37. <View style={[styles.sub_flex]}>
  38. <Image source={{uri:subject_supImages[1]}} style={styles.sub_sup_right_img}/>
  39. </View>
  40. </View>
  41.  
  42. <View style={[styles.sub_sup_right_bottom,styles.color_grey]}>
  43. <View style={[styles.sub_flex,styles.sub_sup_borderRight,{alignItems: 'center',justifyContent: 'center'}]}>
  44. <Text style={[styles.sub_price_fontSize,color: '#3D98FF'}]}>
  45. 海外精选
  46. </Text>
  47. <Text style={{fontSize: 12,marginLeft: 5}}>
  48. 百元出境游
  49. </Text>
  50. <Image source={{uri:subject_supImages[2]}} style={styles.sub_sup_rightBottom_img}/>
  51. </View>
  52.  
  53. <View style={[styles.sub_flex,color: '#4FC72F'}]}>
  54. 周边玩乐
  55. </Text>
  56. <Text style={{fontSize: 12,marginLeft: 5}}>
  57. 十元度周末
  58. </Text>
  59. <Image source={{uri:subject_supImages[3]}} style={styles.sub_sup_rightBottom_img}/>
  60. </View>
  61. </View>
  62.  
  63. </View>
  64.  
  65. </View>
  66. </View>

具体的样式见源代码

六、底部布局

  1. class Tab extends Component {
  2. render() {
  3. return (
  4. <View style={[styles.sub_tab_flex,styles.sub_tab_topLine]}>
  5. <View style={styles.sub_tab_icon}>
  6. <Image source={require('./imgs/tab_item_01.png')} style={styles.sub_tab_image}/>
  7. <Text style={[{color: '#3D98FF'},styles.sub_tab_font]}>首页</Text>
  8. </View>
  9.  
  10. <View style={styles.sub_tab_icon}>
  11. <Image source={require('./imgs/tab_item_02.png')} style={styles.sub_tab_image}/>
  12. <Text style={styles.sub_tab_font}>行程</Text>
  13. </View>
  14.  
  15. <View style={styles.sub_tab_icon}>
  16. <Image source={require('./imgs/tab_item_03.png')} style={styles.sub_tab_image}/>
  17. <Text style={styles.sub_tab_font}>客服</Text>
  18. </View>
  19.  
  20. <View style={styles.sub_tab_icon}>
  21. <Image source={require('./imgs/tab_item_04.png')} style={styles.sub_tab_image}/>
  22. <Text style={styles.sub_tab_font}>我的</Text>
  23. </View>
  24. </View>
  25. );
  26. }

具体的样式见源代码

猜你在找的React相关文章