React-Native 填坑之ListView(item更新)
生活随笔
收集整理的這篇文章主要介紹了
React-Native 填坑之ListView(item更新)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一 背景
效果圖如下:二 解決辦法
我的目的是實現(xiàn)單選item,正常情況設(shè)置一個state變量來保存選中的Index,在每次點擊item的時候改變index就OK!但是,我想的太天真了。this.setState()只能渲染外部組件,而ListView子組件卻沒有渲染。仔細想想確實有道理,像anroid要改變item,還得調(diào)用adapter.notifyDataSetChanged(),所以,這里的原理也差不多。知道問題所在,就好解決了,這里只需要改變ListView的數(shù)據(jù)源,然后在每次調(diào)用的時候再配置給ListView,那么它就會重新去渲染了。
具體代碼如下:
/***數(shù)據(jù)源**/getListData() {var dataSource = [{"bankId": 1,"bankName": "建設(shè)銀行","bankType": "存儲卡","bankNum": "**** **** **** 5745","code": "jsyh"},{"bankId": 2,"bankName": "工商銀行","bankType": "存儲卡","bankNum": "**** **** **** 5845","code": "gsyh"}];return dataSource;}/** *點擊Item時調(diào)用的方法 **/onPressRow(rowData, sectionID, rowID) {let newData = this.getListData();newData[rowID].isSelected = !newData[rowID].isSelected;//重點在這里,給數(shù)據(jù)源動態(tài)添加一個isSelected屬性。this.setState({selectIndex: rowData.bankId,dataSource: this.state.dataSource.cloneWithRows(newData)});}注意
上面的方法只適合靜態(tài)數(shù)據(jù),如果是從網(wǎng)上加載的數(shù)據(jù),還是不能解決淺拷貝問題,可以使用第三方庫lodash來解決,npm地址:https://www.npmjs.com/package/lodash
使用方法:
三 結(jié)束語
當然這種情況解決辦法有很多,網(wǎng)上提供了些更好的方法,我這里只是拙見,希望大家多多提意見。另外,React Native之旅坑很多,選擇這條路,注定要不斷的跳,不斷的填,希望大家堅持。謝謝各位!
總結(jié)
以上是生活随笔為你收集整理的React-Native 填坑之ListView(item更新)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 2分代复制垃圾回收_Java对
- 下一篇: 一个python的UG二次开发简单实例