1才写,Component Key
如果component用了random key劳曹,那么react會(huì)在做虛擬dom比較的時(shí)候奴愉,就會(huì)認(rèn)為是兩個(gè)dom,render的時(shí)候就會(huì)重新繪制所有組件铁孵。如果我們?cè)趆ome里面用了random key,那么每次render home的時(shí)候房资,必然重新繪制整個(gè)app蜕劝,不管用什么方式優(yōu)化性能都不會(huì)起作用。因?yàn)樘摂Mdom的根節(jié)點(diǎn)變了轰异。
所有我們代碼里不要給component設(shè)置random key岖沛。
2,F(xiàn)latList,? SectionList回調(diào)函數(shù)賦值
由于sectionlist搭独、flatlist是purecomponent婴削,purecomponent在做虛擬dom比較的時(shí)候,會(huì)做一個(gè)淺判斷:如果子組件的props或者state沒有變化牙肝,則不重新繪制該組件唉俗。
如果render list對(duì)某個(gè)屬性賦值時(shí)做bind操作,則會(huì)導(dǎo)致list的該屬性在每次render的時(shí)候都不一樣(每次bind都會(huì)賦值一個(gè)新對(duì)象)配椭,就會(huì)導(dǎo)致list重新刷新虫溜,影響性能。
wrong
為了優(yōu)化list的性能股缸,不要在對(duì)flatlist衡楞、sectinlist的回調(diào)函數(shù)賦值時(shí)進(jìn)行bind,對(duì)list賦值的回調(diào)函數(shù)最好在constructor里賦值敦姻,然后在render的時(shí)候只賦值一個(gè)變量瘾境。
good
3,動(dòng)畫效果
動(dòng)畫效果不要用timer的setInterval或者頻繁setState镰惦,不然會(huì)卡頓迷守。應(yīng)用animated實(shí)現(xiàn)。
InteractionManager
InteractionManager.runAfterInteractions是為了將需要長時(shí)間處理的任務(wù)如網(wǎng)絡(luò)請(qǐng)求等放入InteractionManager異步執(zhí)行陨献,好防止其影響用戶交互盒犹、動(dòng)畫效果等。
不要在InteractionManager.runAfterInteractions里執(zhí)行動(dòng)畫效果眨业。