React-Native 填坑之ListView(item更新)
来源:互联网 发布:edg淘宝店 编辑:程序博客网 时间:2024/05/29 04:54
一 背景
效果图如下:
二 解决办法
我的目的是实现单选item,正常情况设置一个state变量来保存选中的Index,在每次点击item的时候改变index就OK!但是,我想的太天真了。this.setState()只能渲染外部组件,而ListView子组件却没有渲染。仔细想想确实有道理,像anroid要改变item,还得调用adapter.notifyDataSetChanged(),所以,这里的原理也差不多。知道问题所在,就好解决了,这里只需要改变ListView的数据源,然后在每次调用的时候再配置给ListView,那么它就会重新去渲染了。
具体代码如下:
/** *数据源 **/ getListData() { var dataSource = [ { "bankId": 1, "bankName": "建设银行", "bankType": "存储卡", "bankNum": "**** **** **** 5745", "code": "jsyh" }, { "bankId": 2, "bankName": "工商银行", "bankType": "存储卡", "bankNum": "**** **** **** 5845", "code": "gsyh" } ]; return dataSource; }/***点击Item时调用的方法**/ onPressRow(rowData, sectionID, rowID) { let newData = this.getListData(); newData[rowID].isSelected = !newData[rowID].isSelected;//重点在这里,给数据源动态添加一个isSelected属性。 this.setState({ selectIndex: rowData.bankId, dataSource: this.state.dataSource.cloneWithRows(newData) }); }
注意
上面的方法只适合静态数据,如果是从网上加载的数据,还是不能解决浅拷贝问题,可以使用第三方库lodash来解决,npm地址:https://www.npmjs.com/package/lodash
使用方法:
import _ from 'lodash';//导入let newData =_.cloneDeep(this.data);//这里就是关键了,深拷贝
三 结束语
当然这种情况解决办法有很多,网上提供了些更好的方法,我这里只是拙见,希望大家多多提意见。另外,React Native之旅坑很多,选择这条路,注定要不断的跳,不断的填,希望大家坚持。谢谢各位!
0 0
- React-Native 填坑之ListView(item更新)
- React Native填坑之旅--ListView篇
- React Native填坑之旅--ListView的Section Header
- react native 填坑之旅
- react-native 填坑之旅
- react-native listview remove item
- react-native Navigator 填坑
- React Native 填坑指南
- react native实战填坑
- React-Native 之ListView
- React-Native ListView拖拽交换Item
- React-Native ListView拖拽交换Item
- React Native填坑之旅--Button篇
- React Native填坑之旅--动画篇
- React Native填坑之旅--HTTP请求篇
- React Native填坑之旅--LayoutAnimation篇
- React Native填坑之旅--Flow篇(番外)
- React Native填坑之旅--Navigation篇
- Qt Quick HelloWorld以及基本QML解析
- Spring 框架参考文档(五)-The Web之 WebSocket 支持
- 音视频 播放每次出现这个log信息 播放就会明显得卡顿一下 ,各位帮忙看下什么原因,该怎么处理啊 新手求指教
- Intellij IDEA 安装Scala 报 ‘plugin scala is incompatible‘ 解决方案
- 网络编程(50)—— 使用poll搭建回声服务端
- React-Native 填坑之ListView(item更新)
- Android自定义下拉刷新动画--仿百度外卖下拉刷新
- thinkphp 页面跳转不显示问题 data-ajax="false"
- 阿里云 实现流媒体 直播 demo
- 2-python图像处理之Matplotlib
- Spring 框架参考文档(六)-Integration之Remoting and web services using Spring
- 32位和64位操作系统的区别
- 一些Linux用到的C工具集常用函数实现
- Evaluation of Parsing 句法分析评测