React Native中ListView的刷新問(wèn)題及子組件的刷新問(wèn)題

最近在項(xiàng)目中引入了React Native,在開發(fā)過(guò)程中遇到了不少問(wèn)題湿故。其中l(wèi)istView的刷新機(jī)制和子組件的刷新問(wèn)題尤為頭痛蟆炊,在此記錄一下稽莉。

一、ListView的刷新機(jī)制

在RN中加入一個(gè)ListView組件時(shí)涩搓,你需要指定ListView的datasource即數(shù)據(jù)來(lái)源污秆。一般我們會(huì)在構(gòu)造函數(shù)中設(shè)置ListView的datasource:

其中dataBlob是字典嵌套的數(shù)組類似于:{key1:[row1, row2, row3], key2: [row1, row2],...},sectionIdArr是所有key的數(shù)組[key1, key2,...]昧甘。若不需要section時(shí)dataBlob可以使用純數(shù)組[row1, row2, row3,...]混狠。

而其中非常重要的兩個(gè)函數(shù)rowHasChanged(r1, r2)、sectionHeaderHasChanged(r1, r2)指定了什么時(shí)候調(diào)用renderRow()和renderSectionHeader()來(lái)刷新ListView疾层。

rowHasChanged: (r1, r2)=> r1!==r2

意思是當(dāng)rowdata發(fā)生改變時(shí)調(diào)用renderRow()将饺。這樣你重新給state里的dataSource賦值時(shí)就會(huì)調(diào)用ListView的renderRow()了。

在這里你必須注意一點(diǎn):不可以在原有的dataBlob上修改痛黎,如下操作是不會(huì)觸發(fā)renderRow()的:

推薦使用JSON.parse(JSON.stringify(dataMap))來(lái)返回一個(gè)新的dataBlob予弧,這樣可以簡(jiǎn)單有效的觸發(fā)renderRow()的:

二、子組件的刷新與state問(wèn)題

1湖饱、刷新問(wèn)題


與圖所示掖蛤,若我們?cè)贚istView上加一個(gè)選擇按鈕,點(diǎn)擊會(huì)有選中效果井厌。有兩種做法蚓庭,一種直接加一個(gè)Image在row上面,并在rowdata里面加入一個(gè)select字段來(lái)記錄選中狀態(tài)仅仆,點(diǎn)擊時(shí)改變ListView的Datasource來(lái)刷新這個(gè)image器赞。不過(guò)這樣會(huì)很麻煩,要改變datasource墓拜,要重新調(diào)用reder()港柜,這樣改變一個(gè)按鈕狀態(tài)會(huì)重刷整個(gè)界面相當(dāng)不合理。第二種做法就是新建一個(gè)組件在組件里做這些操作。下面就說(shuō)一下第二種方法

我們新建一個(gè)組件叫Button.js:

并在父組件里調(diào)用Button組件:

這樣點(diǎn)擊的時(shí)候按鈕就會(huì)切換狀態(tài)夏醉,并調(diào)用父組件的selectAll返回爽锥。而且不需要再父組件里重刷界面。

2畔柔、state問(wèn)題

如果現(xiàn)在有個(gè)新需求氯夷,在刷新界面是要保持選中狀態(tài),要如何去做呢靶擦?我們要了解肠槽,當(dāng)組件已經(jīng)加載過(guò)后,父組件重新render()時(shí)奢啥,子組件是不會(huì)重新調(diào)用constructor的秸仙。不過(guò)這時(shí)他們觸發(fā)componentWillUpdate方法,我們只要在這里重新給Button的state賦值就可以了:

并且在刷新的時(shí)候給button的props將seletcted傳遞過(guò)去就可以了桩盲。

三寂纪、結(jié)語(yǔ)

學(xué)習(xí)新技術(shù)的過(guò)程中難免會(huì)遇到這樣那樣的坑和難題,不過(guò)只有這樣人才能成長(zhǎng)和進(jìn)步赌结,本文記錄總結(jié)了本人在使用RN的過(guò)程中遇到的一些問(wèn)題捞蛋。希望能給別的有點(diǎn)小小的幫助,文章中如有錯(cuò)誤或紕漏還望不吝賜教柬姚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拟杉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子量承,更是在濱河造成了極大的恐慌搬设,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撕捍,死亡現(xiàn)場(chǎng)離奇詭異拿穴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)忧风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門默色,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人狮腿,你說(shuō)我怎么就攤上這事腿宰。” “怎么了缘厢?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵吃度,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我昧绣,道長(zhǎng)规肴,這世上最難降的妖魔是什么捶闸? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任夜畴,我火速辦了婚禮拖刃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贪绘。我一直安慰自己兑牡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布税灌。 她就那樣靜靜地躺著均函,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菱涤。 梳的紋絲不亂的頭發(fā)上苞也,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音粘秆,去河邊找鬼如迟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛攻走,可吹牛的內(nèi)容都是我干的殷勘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼昔搂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玲销!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起摘符,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贤斜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后逛裤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蠢古,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年别凹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了草讶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炉菲,死狀恐怖堕战,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拍霜,我是刑警寧澤嘱丢,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站祠饺,受9級(jí)特大地震影響越驻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一缀旁、第九天 我趴在偏房一處隱蔽的房頂上張望记劈。 院中可真熱鬧,春花似錦并巍、人聲如沸目木。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)刽射。三九已至,卻和暖如春剃执,著一層夾襖步出監(jiān)牢的瞬間誓禁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工肾档, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留现横,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓阁最,卻偏偏與公主長(zhǎng)得像戒祠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子速种,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容