React Native ListView的长按删除功能

来源:互联网 发布:私募 变更 知乎 编辑:程序博客网 时间:2024/05/16 03:28

项目中React Native ListView的长按删除功能分享(基于ES5):

[javascript] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * Sample React Native App 
  3.  * https://github.com/facebook/react-native 
  4.  * @flow 
  5.  */  
  6.   
  7. import React, {Component} from 'react';  
  8. import {  
  9.     AppRegistry,  
  10.     StyleSheet,  
  11.     Text,  
  12.     View,  
  13.     ListView,  
  14.     TouchableOpacity  
  15. } from 'react-native';  
  16.   
  17. var ds = new ListView.DataSource({  
  18.     rowHasChanged: (r1, r2) => {  
  19.         r1 !== r2  
  20.     }  
  21. });  
  22.   
  23. var rows = ['row 1''row 2''row 3''row 4''row 5''row 6'];  
  24.   
  25. var XXX = React.createClass({  
  26.   
  27.     getInitialState() {  
  28.         return {  
  29.             dataSource: ds.cloneWithRows(rows),  
  30.         };  
  31.     },  
  32.   
  33.     _deleteRow(rowID) {  
  34.         delete rows[rowID];  
  35.         this.setState({dataSource: ds.cloneWithRows(rows)})  
  36.     },  
  37.   
  38.     renderRow(rowData, sectionID, rowID) {  
  39.         return <TouchableOpacity onLongPress={()=>this._deleteRow(rowID)}  
  40.                                  style={{height: 60, flex: 1, borderBottomWidth: 1}}>  
  41.             <Text>{rowData}</Text>  
  42.         </TouchableOpacity>  
  43.     },  
  44.   
  45.     render() {  
  46.         return (  
  47.             <ListView  
  48.                 dataSource={this.state.dataSource}  
  49.                 renderRow={this.renderRow}  
  50.             />  
  51.         );  
  52.     }  
  53.   
  54.   
  55.   
  56. });  
  57.   
  58. AppRegistry.registerComponent('XXX', () => XXX);  

补充1:JS的删除方法除了delete删除不改变数组长度外,还有splice等方法。


补充2:rowHasChanged是 React native 组件纪录 state 是否更新的一个方法,等于或不等于并不影响你第一次显示,影响的是你state变化以后的显示情况。如果是等于,state变化 页面不更新 , state不变,才更新(一般不用)。不等于就是 state变化 页面立即更新。
rowHasChanged即sectionID,react将数据封装成了新对象,key叫s1 s2 ... ,打印rowHasChanged或者sectionID即输出s1 s2 ...


补充3:如果ListView中有enableEmptySections = {true}属性,字面理解为可以使ListView的元素item为空。测试:删除最后一个item,debug模式下会报一个警告,如下图。


react native官方后续还会优化这块


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 文档中光标变粗怎么办 wps排序有重复的怎么办 记英语数字老是混怎么办 苹果手机输入法出数字怎么办 word文档复制过来有底色怎么办 表格复制后还再显示复制符号怎么办 笔记本字母键打出数字怎么办 wps打字字上移了怎么办 微信里黑圈里面的白字是怎么办 脖子比脸黑好多怎么办 河南许昌小学生生病办休学怎么办 1岁宝宝内向胆小怎么办 3岁宝宝内向胆小怎么办 数学物理好不喜欢学医怎么办 孩子眉毛太浓了怎么办 小娃一年级成绩太差怎么办 孩子晚上睡得晚怎么办 在深圳买房难小孩读书怎么办 上海小孩读书积分不够怎么办 读书时静不下心怎么办 初中生静不下心读书怎么办 孩子学习静不下心怎么办 退烧后体温35度怎么办 孩子体温34度多怎么办 宝宝感冒咳嗽流鼻涕出汗怎么办 养的小鸡总打架怎么办 小鸡一条腿瘸了怎么办 同窝小斗鸡打架怎么办 夏季羊长的慢怎么办 1岁吃母乳不吃饭怎么办 5个月宝宝黏妈妈怎么办 九个月宝宝不爱吃饭怎么办 20个月宝宝吐了怎么办 十个月的宝宝消化不好怎么办 两岁宝宝不爱喝水怎么办 两岁宝宝不爱喝水吃饭怎么办 两岁的宝宝不爱喝水怎么办 宝宝不爱吃饭不爱喝水怎么办 一多半宝宝爱喝水 不爱吃饭怎么办 1岁宝宝不爱吃饭喝水怎么办 两岁小宝宝不爱吃饭怎么办