ReactNative 组件封装---Modal
来源:互联网 发布:网易数据 广州 编辑:程序博客网 时间:2024/06/05 17:38
组件封装—Modal
一、简介
项目开发中,总会遇到弹出窗,弹出窗的功能可能会是确认、单项选择、多选、提示等等,一般情况下我们想要的效果通常是在当前页面触发事件,弹出遮罩层,并不会完全覆盖掉当前页面,当前页面处于部分可见,而布局的焦点处于遮罩层上,一般可见布局位于中央部分,本篇博客带大家制作一个单选框的Modal
二、思路整理
- 定义需要的属性,定义属性类型和默认值
- 绘制界面
- 调用组件
三、具体实现
创建ListViewModal.js文件,定义ListViewModal类
1. 添加组件
- name: prop-types
- homepage: https://www.npmjs.com/package/prop-types
- install:
npm install --save prop-types
- 组件说明: 该组件用来检测传递给组件的属性是否与定义的类型一致
2. 定义属性
引入prop-types
import PropTypes from 'prop-types';
- 定义属性类型
- note: class外部定义(即不可包含在ListViewModal类内部)
- note: 需展示的数据以数组的形式传递
ListViewModal.propTypes = { title: PropTypes.string // 标题 ,modalVisible: PropTypes.bool // 显示开关 ,dataSource: PropTypes.array // 文本数据 ,onConfirm: PropTypes.func.isRequired // 确认回调 ,onCancel: PropTypes.func.isRequired // 取消回调}
- 定义属性默认值
ListViewModal.defaultProps = { title: '请选择' ,dataSource: [] ,modalVisible: false}
3. 绘制界面
<Modal animationType={'slide'} transparent={true} visible={this.props.modalVisible} onRequestClose={() => {this.onCancel()}}> <View style={{flex:1, justifyContent:'center',alignItems:'center', backgroundColor:'rgba(0, 0, 0, 0.5)'}}> <View style={{ backgroundColor:'#fff', borderRadius: 10 ,height:350}}> <View style={{justifyContent:'center', alignItems:'center', borderBottomWidth:1, borderBottomColor:'#d5d5d5', height:35}}> <Text style={{ fontSize:15,color:'#009AD6'}}>{this.props.title}</Text> </View> <ScrollView style={{marginTop:10}}> { this.props.dataSource.map((rowData) => { return( <TouchableOpacity onPress={() => {this.optionSelected(rowData)}}> <View style={{ justifyContent: 'center', alignItems: 'center', height: 30, borderBottomColor: '#efefef', borderBottomWidth: 1 }}> <Text style={{ fontSize: 14 }}>{rowData.title}</Text> </View> </TouchableOpacity> ) }) } </ScrollView> <TouchableOpacity onPress={()=>{this.onCancel()}}> <View style={{marginTop:15,marginRight:10,width:200,marginLeft:10,marginBottom:15,backgroundColor:'#009AD6',height:35,justifyContent:'center',borderRadius:1}}> <Text style={{textAlign:'center',color:'white',fontSize:15}}>取消</Text> </View> </TouchableOpacity> </View> </View></Modal>
- animationType: 动画类型
- transparent: 遮罩是否透明
- visible: 遮罩显示开关,由外部传递的参数控制
- onRequestClose: 取消请求方法,用户点击物理返回键是调用
- Modal标签中间部分为展示布局代码
4. 两个回调方法的实现
onCancel() { this.props.onCancel()}
- note: 外部调用时,实现onCancel()回调方法
optionSelected(option) { this.props.onConfirm(option) this.onCancel()}
- note: 外部调用时,实现onConfirm()回调方法
5. 外部调用
- 引入ListViewModal组件
import ListViewModal from '../../common/page/ListViewModal'
- 组件的使用
// 构造方法中:定义模拟数据this.platFormData = [ { "id": 0 ,"title": "aaa" } ,{ "id": 1 ,"title": "bbb" } ,{ "id": 2 ,"title": "ccc" } ,{ "id": 3 ,"title": "ddd" },{ "id": 4 ,"title": "eee" } ,{ "id": 5 ,"title": "fff" } ]// 构造方法中:组件初始状态this.state = { modalVisible: false}// render方法中:布局调用组件<ListViewModal title={'选择平台'} dataSource={this.platFormData} onCancel={() => { this.setState({ modalVisible: false })}} onConfirm={(option) => { console.log(JSON.stringify(option)) }} modalVisible={this.state.modalVisible } /> // render方法中:组件触发事件 <TouchableOpacity onPress={() => { this.setState({ modalVisible: true })}}></TouchableOpacity>
阅读全文
0 0
- ReactNative 组件封装---Modal
- ReactNative学习笔记--基于Modal的多步弹窗的封装
- ReactNative学习笔记--基于Modal的多步弹窗的封装
- ReactNative学习笔记--基于Modal的多步弹窗的封装
- 第四章、ReactNative组件的封装
- 《React-Native系列》38、 ReactNative混合组件封装
- 《React-Native系列》38、 ReactNative混合组件封装
- ReactNative开发——封装原生UI组件
- react-native modal封装
- ReactNative(五)——组件封装、样式定义、父子组件通过props传值
- ReactNative实战系列 组件封装之Dialog(iOS和Android通用)
- ReactNative-Image组件
- ReactNative-Picker组件
- ReactNative-Switch开关组件
- ReactNative-WebView组件
- ReactNative开源组件
- ReactNative组件生命周期
- reactNative Navigator导航组件
- 解决Tomcat的Failed to initialize…
- 将博客搬至CSDN
- 设置查看linux 造成程序Core dumped 的函数调用层次
- 数据融合(data fusion)
- HTML文档中小meta标签的大作用
- ReactNative 组件封装---Modal
- Mycat入门教程
- Thymeleaf标准表达式语法
- OkHttp3 源码解读
- opencv学习笔记--霍夫线变换
- ajax
- Faster rcnn demo (GPU)(第一篇博客基础上)
- Hadoop
- java 测试