React Native自定义控件实现底部抽屉菜单

原生开发中,自定义view可谓是屡见不鲜的事情,往往系统的控件总不能满足现实的需求。五花八门的产品设计需要我们做出不同的view。关于自定义view的内容网上已经有很多的博文,本篇博客要和大家分享如何在react native中自定义组件实现抽屉菜单控件效果。分享功能在app中的重要性想必是不言而喻的,那么rn中如何实现这种效果呢?本文主要和大家介绍react native自定义控件底部抽屉菜单的示例,希望能帮助到大家。

React Native 系统库中只提供了IOS的实现,即ActionSheetIOS.该控件的显示方式有两种实现:

(1)showActionSheetWithOptions

(2)showShareActionSheetWithOptions

第一种是在iOS设备上显示一个ActionSheet弹出框。第二种实现是在iOS设备上显示一个分享弹出框。借用官方的图片说明如下:

React Native自定义控件实现底部抽屉菜单  React Native自定义控件实现底部抽屉菜单

IOS设备上的实现系统已经提供了,接下来我们就需要如何适配Android。在原生开发中,自定义View也是有基本的流程:

(1)自定义控件类,继承View或系统控件。

(2)自定义属性

(3)获取自定义属性,并初始化一系列工具类

(4)重写onMeasure方法,对控件进行测量

(5)如果是自定义布局,还需要重写onLayout进行布局

在React Native中自定义组件的思路基本和原生自定义相似。所以按照这个流程,我们一步步实现即可。

二、功能实现

1、自定义组件,实现Component

export default class AndroidActionSheet extends Component

登录后复制

2、自定义属性

// 1.声明所需要的属性 static propTypes= {   title: React.PropTypes.string, // 标题   content: React.PropTypes.object, // 内容   show: React.PropTypes.func, // 显示   hide: React.PropTypes.func, // 隐藏 }

登录后复制

constructor(props) {   super(props);   this.translateY = 150;   this.state = {     visible: false,     sheetAnim: new Animated.Value(this.translateY)   }   this.cancel = this.cancel.bind(this); }

登录后复制

3、实现基本布局

/** * Modal为最外层,ScrollView为内容层 */ render() {     const { visible, sheetAnim } = this.state;     return(                                                     { this._renderTitle() }                            {this._renderContainer()}                                             ) }

登录后复制

可以看到上面我们定义了基本的布局,布局中使用_renderTitle()方法来渲染标题部分,内容区域为ScrollView,并且为横向滚动,即当菜单项超过屏幕宽度时,可以横向滑动选择。在内部调用了renderContainer方法来渲染菜单:

/** * 标题 */ _renderTitle() {   const { title,titleStyle } = this.props;   if (!title) {     return null   }     // 确定传入的是不是一个React Element,防止渲染的时候出错   if (React.isValidElement(title)) {     return (       {title}     )   }   return (     {title}   ) }  /** * 内容布局 */ _renderContainer() {     const { content } = this.props;     return (                { content }            )   }

登录后复制

当我们需要点击Modal,进行关闭时,还需要处理关闭操作,Modal并没有为我们提供外部关闭处理,所以需要我们单独实现,从布局代码中我们看到TouchableOpacity作为遮罩层,并添加了单机事件,调用cancel来处理:

/**  * 控制Modal点击关闭,Android返回键关闭  */  cancel() {   this.hide(); }

登录后复制

4、自定义方法,对外调用

在外部我们需要控制控件的显示和隐藏,所以需要对外公开显示、关闭的方法:

/**  * 显示  */ show() {   this.setState({visible: true})   Animated.timing(this.state.sheetAnim, {     toValue: 0,     duration: 250   }).start(); }

登录后复制

/**  * 隐藏  */ hide() {    this.setState({ visible: false })    Animated.timing(this.state.sheetAnim, {     toValue: this.translateY,     duration: 150    }).start(); }

登录后复制

5、使用


登录后复制

至此,我们自定义组件就完成了。整体来看,基本的原理还是很简单的,主要利用了自定义属性,传参,动画,就可以轻松的实现了。本篇博客重点不是为了让大家知道怎么去写出这个效果,而是让大家明白,当我们遇到一个需要自定义的实现时,该如何去一步步实现。

三、效果图

React Native自定义控件实现底部抽屉菜单

相关推荐:

React Native自定义组件实现抽屉菜单控件效果

微信小程序开发之抽屉菜单实例详解

用CSS打造 抽屉菜单_经验交流

以上就是React Native自定义控件实现底部抽屉菜单的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2786526.html

(0)
上一篇 2025年3月8日 17:46:12
下一篇 2025年3月8日 17:46:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • react前后端同构渲染示例代码

    前后端同构渲染:当客户端请求一个包含react组件页面的时候,服务端首先响应输出这个页面,客户端和服务端有了第一次交互。然后,如果加载组件的过程需要向服务端发出ajax请求等,客户端和服务端又进行了一次交互,这样,耗时相对较长。前后端同构渲…

    2025年3月8日
    200
  • React中的refs的使用教程分享

    ref是react中的一种属性,当render函数返回某个组件的实例时,可以给render中的某个虚拟dom节点添加一个ref属性,如下面的代码所示:     var App = React.createClass({ render: fu…

    2025年3月8日
    200
  • 利用angular、react和vue实现相同的面试题组件

    react 和angular,vue 这三个框架最近都比较火,本文主要给大家介绍的是关于angular、react和vue实现相同的面试题组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 面试题要求如下所示 …

    2025年3月8日
    200
  • React拖拽排序组件Dragact详解

    先来一张图看看: Typescript(TS) 最近一直在使用TS进行开发,Eggjs的Ts实践也写了一半。这玩意儿,真的是有毒的,因为能让你上瘾。 随便将一个项目迁移到TS之上,在强大的静态类型检测下,你就能轻松的发现一堆逻辑和边界错误。…

    2025年3月8日
    200
  • react、webpack、跨域代理多页面

    初学react,利用webpack进行工程化开发管理,遇到一些问题,如多页面处理,跨域代理的设置,如何同时引入使用jquery。第一次试水,简单写了一个表格组件。 先照着react官网提供的教程使用create-react-app创建rea…

    编程技术 2025年3月8日
    200
  • react轮播图组件react-slider-light详解

    本文主要和大家分享react轮播图组件react-slider-light详解,希望能帮助到大家。 react-slider-light a lightweight slider component built with react. 一个…

    编程技术 2025年3月8日
    200
  • React组件Dragact 0.1.4详解

    dragact 是一款react组件,他能够使你简单、快速的构建出一款强大的 拖拽式网格(grid)布局. 仓库地址:Dragact 经过几天的迭代时间Dragact已经能够支持自由缩放功能了(resize) 废话不多说,来看看demo 新…

    2025年3月8日
    200
  • React组件生命周期详解

    在使用react创建组件的过程中,会调用一个render方法,以及触发若干生命周期的方法。本文主要和大家讲一讲这些生命周期的方法是何时被执行的。 理解组件的生命周期,当组件被创建或销毁时,可以执行某些操作。此外,当 props 和 stat…

    2025年3月8日 编程技术
    200
  • 简单介绍React

    本文主要和大家分享一下react的起源及发展,希望啊能帮助到大家。 字符拼接时代 – 2004 时间回到 2004 年,Mark Zuckerberg 当时还在宿舍捣鼓最初版的 Facebook 。这一年,大家都在用 PHP 的…

    2025年3月8日 编程技术
    200
  • React中的元素、组件、节点详解

    本文主要和大家介绍了react中的元素、组件、节点,也给大家做个参考,希望能帮助到大家。 React 中的元素、组件、实例和节点,是React中关系密切的4个概念,也是很容易让React 初学者迷惑的4个概念。现在,老干部就来详细地介绍这4…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论