React Native中组件的封装使用

React Native中组件的封装使用

   不知不觉,入坑RN也有一个月了,本来就是从安卓原生转过来,刚入手是一脸懵逼的,到现在项目也写了几个功能界面, 算是一只脚迈进了RN的大门,学习新知识,总结很重要,古人说得好:温故而知新,是非常有科学道理的,所以时不时应该挤出点时间来做做笔记总结。这篇主要总结下组件复用。

一、 组件的封装复用

   RN的精髓就是组件的复用,随着写的界面增多,你会爱上这种操作,就像再搭建一座城堡,一块块砖组件而成,load一下,城堡就屹立在你眼前。下面举个项目中封装的比较简单的demo。
   
- 轮播图Swiper的封装
   我们的项目中,好几个页面都用到了轮播图,而且每个轮播图轮播的图片也是不一样的,这时候就应该考虑写个壳子,需要使用到这个轮播图的页面,把这个壳子拿来自己填充东西(轮播图片)进去,实现灵活的定制。轮播图的实现是采用了目前在RN上比较主流的Swiper,github上star4K多,算是比较稳定,之前有尝试过另一个控件viewpager,出现了一些奇怪的bug而弃之。下面看看我封装后的demo:Banner.js

render(){
        let swiper = null;
        if (this.state.visibleSwiper) {  //这里设置了visible是因为与页面底部导航有冲突,可忽略
            swiper = <Swiper showButton={false}
                             autoplay={true}
                             height={this.props.height}   //高度可定制
                             removeClippedSubviews={false}
                             dot={<View style={styles.customDot} />}
                             activeDot={<View style={styles.customActiveDot} />}
                             paginationStyle={{
                                 bottom: 10
                             }}
            >
            //bannerData就是一组轮播图片,数组中每个图片的地址就是item,map映射到每个Image中
                {this.props.bannerData.map(item => {
                    return (
                        <View style={{flex:1}}>
                            <TouchableHighlight  >
                                <Image source={{uri:item}} style={{width:360,height:this.props.height}}></Image>        
                            </TouchableHighlight>
                        </View>
                    )
                })}
            </Swiper>;
                } else {
                swiper = <View></View>;
            }
        return(
            <View style={{flexDirection:'row'}}>
            {swiper}
            </View>
        )

    };

在使用的页面中导入我们封装好了的这个轮播图,如下:

import Banner from '../../components/Banner'

 //sliderImgs就是轮播图数组[url1,url2,....],赋值给bannerData
 <Banner height={180} bannerData={sliderImgs} />
  • 小结
      组件的复用,其实就是子组件与父组件通信,被使用的一方就是子组件,被人拿去定制成为别人特有的组件,这时候子组件只要暴露出那些可以定制的属性,通过this.props.xxx,然后父组件就得根据子组件定义的属性来给出具体的属性值 xxx=“” 稍微写一点就得快一小时,时间真是不经花呢
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值