React-native实现各种弹框

最近学习RN有段时间了,自己边学习也变写了一些RN相关小插件,比如这篇我讲到的react-native的toast弹框,自定义alert弹框和loading弹框,可以给初学RN的有需要朋友提供些参考,当然我也是学习别人的,写的不一定很好,请多多指教,先看看效果吧:

弹框效果.gif

其实实现起来并不是很难,
我实现的功能有,和说一下需要注意的地方:

  • toast弹框,分三种头部显示,中部显示和底部显示,但是此外我还对键盘做了监听,当键盘弹出的时候,toast依旧可以正常进行中部显示和底部显示而不被键盘遮挡,监听方法很简单,使用RN自带的监听做好监听然后让视图进行偏移就好了:
componentWillMount () {
        this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);
        this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
    }

    componentWillUnmount() {
        this.state.keyboardHeight = 0;
        // 在页面生命周期结束时,解除定时器,避免内存泄漏
        clearTimeout(this.dismissHandler)
        //移除键盘监听
        this.keyboardDidShowListener.remove();
        this.keyboardDidHideListener.remove();
    }
    //键盘监听事件
    _keyboardDidShow =(e) =>{
        this.state.keyboardHeight=e.endCoordinates.height;
    }

    _keyboardDidHide= ()=> {
        if(this.state) {
            this.state.keyboardHeight = 0;
        }
    }
  • loading弹框也比较简单,主要使用自定义弹出视图和RN提供菊花组件ActivityIndicator,可参考
    强调一点:toast和loading弹框都是用自定弹出背景视图View,它的style属性如下:
container: {
        position: "absolute",
        width: width,
        height: height,
        zIndex: 99999,
        flexDirection: "row",
        justifyContent: "center",
        alignItems: 'center',

    }
  • 自定义alert弹框就比较麻烦一点了,我这边实现的功能自定义头部视图,内容视图,还有可以添加多个底部button按钮。这里我没有背景弹出视图没有自定义,而是用了RN自带的Modal作为弹出背景视图,这样我是是想可以用modal动画弹出方式,目前有三种 slide,fade,none,Modal参考.

其实第三方RN组件别人写好的很多,但是我们自己实现了可以提升我们自己的能力,增加我们自己的成就感不是吗哈哈。

我的这些弹框具体怎么使用和怎么实现的,有兴趣的话可以看我的Demo,里面写的很详细哦,这里就不多做介绍啦!


思考:每次调用,都要在对应的视图里面加入对应插件视图,比如使用我的toast弹框,就需要在对应页面先加入

<ToastView
                  onDismiss={() => {
                      //alert('toast消失了');
                  }}
                  ref={(element) => {
                      this.plToast = element;
                  }}
              />

然后在调用对应方法this.plToast.show('我是测试toast');,是不是觉得有些麻烦和不方便有没有类似iOS和安卓那种只需要调用方法就行了,插入对应弹框视图由方法内部实现呢,不要我们管呢,比如我的这个toast,需要的时候,能不能调用类似Toast.show('我是测试toast')就行了,这个方法当然有很多了,就留给大家思考,提示:可参考 react-native-root-siblings

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,060评论 3 119
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 5,521评论 0 10
  • 再有空了写吧
    zz半调阅读 3,297评论 0 0
  • 唐门(二) 打从唐父唐母回来以后,唐璃的精神就时刻紧绷着,怕被唐母发现自己的异样。好在二人平日里都很忙,并没有时间...
    名逸阅读 3,833评论 0 2
  • 2017年的4月,Ellen在青海的高原山村里和全校孩子们放风筝,记得那个下午的蓝天,记得孩子们明亮的眼睛,记得丁...
    9444e0643fbd阅读 548评论 0 0

友情链接更多精彩内容