Button && FlatList 基礎組件

Button

Button組件用到4個屬性妥衣,當然還有其它一些次要的屬性,在此不提:

  • title: {string.isRequired} 按鈕顯示的文字
  • onPress: {string.isRequired} 按鈕事件
  • color: 注意IOS中表示背景色(BackgroundColor), ANDROID中表示按鈕文字的顏色(text color),因為這個差異棒厘,一般使用 TouchableOpacity | TouchableNativeFeedback來封裝Button組件
  • disabled: 禁用和按鈕的交互行為蕊蝗,這個對樣式的影響也是不一樣的盯捌,IOS中底色將變?yōu)榛疑珹NDROID中文字顏色變?yōu)榛疑?背景色也會變灰

源碼 Components/Button.js

查看源碼會發(fā)現(xiàn)android中使用到了 elevation 樣式屬性署隘,根據(jù) material design - Elevation & shadows介紹宠能,可以得知這個屬性是android中增加 z-index,從而增加樣式空間層次感用的

FlatList

功能:

  • 跨平臺
  • 可選的horizontal mode
  • 行組件顯示或者隱藏時可配置回調事件
  • 支持Header
  • 支持Footer
  • 支持Separator
  • 拉動刷新
  • 滾動加載
  • 支持 ScrollToIndex

如果希望支持section, 可以使用 <SectionList>.
注意點:

  • 使用 PureComponent 可以優(yōu)化性能和避免bugs.
  • FlatList 是 VirtualizedListScrollView 的一層封裝磁餐,同時繼承了這2個組件的 props.

renderItem

{func.isRequired}

renderItem({
  item: Object,
  index: number,
  separators: {
    highlight: Function,
    unhighlight: Function,
    updateProps: Function(select: string, newProps: Object)
  }
}) => ?React.Element

data 中選取一個 item 用于渲染list. separators 可以提供3個函數(shù)违崇, 如果 highlight | unhighlight 不能滿足需求阿弃,則可以使用 separators.updateProps 用來設置頂部和底部的分隔符的樣式。

data

{array.isRequired}. data是一個普通的數(shù)組羞延。如果想使用別的渣淳,比如immutable list,可以直接使用底層的 VirtualizedList

ItemSeparatorComponent

{component.optional}

在每個item之間渲染,但是不會再頂部和底部渲染伴箩。默認會提供 highlightedleadingItem 屬性入愧。上面的 renderItem 提供 separators.highlight/unhighlight 將會更新 highlighted屬性,也可以使用separators.updateProps 添加自定義屬性

ListEmptyComponent

{(component | function | element).optional}

當list為空時渲染嗤谚」字耄可以是一個React組件或者一個render function,又或者一個渲染的元素

ListHeaderComponent

{(component | function | element).optional}

在所有items的頂部渲染

ListFooterComponent

{(component | function | element).optional}

在所有items的低部渲染

extraData

一個告訴list重新渲染的標記屬性(因為通過PureComponent實現(xiàn))。如果renderItem | Header | Footer | functions有依賴除 data 以外的屬性巩步,請在此屬性中指定旁赊。同時此數(shù)據(jù)在修改時也需要先修改其引用地址(比如先復制到一個新的Object或者數(shù)組中),然后再修改其值 (即此屬性中的值也要immutable)椅野, 否則界面很可能不會刷新终畅。

getItemLayout

{func.optional}

(data, index) => {length: number, offset: number, index: number}

這個方法是一個可選的優(yōu)化,用于避免動態(tài)測量內(nèi)容尺寸的開銷竟闪,不過前提是你可以提前知道內(nèi)容的高度离福。如果你的行高是固定的, getItemLayout 用起來既高效又簡單炼蛤,類似:

getItemLayout={(data, index) => ({length: Item行高, offset: Item行高 * index, index})}

對幾百個item,添加這個屬性會極大的提升性能术徊。如果使用了 ItemSeparatorComponent 組件,記得在offset計算中包含分割線的長度(高或者寬)鲸湃。

horizontal

{boolean.optional}

選擇渲染的方向,如果為true表示水平的渲染item

initialNumToRender

初次渲染的item條數(shù)子寓。這個數(shù)量應該足夠填充screen,但是又不能太多暗挑。注意這第一批次渲染的元素不會在滑動過程中被卸載,這樣是為了保證用戶執(zhí)行返回頂部的操作時斜友,不需要重新渲染首批元素炸裆。

initialScrollIndex

指定顯示第一條item的索引,默認情況是使用第一條item放置在最上面鲜屏。設置這個屬性將關閉 '滾動到頂端' 這個動作的優(yōu)化烹看。位于 initialScrollIndex 位置的元素總是會被立刻渲染。使用這個屬性前需要先設置 getItemLayout屬性

inverted

翻轉滾動方向洛史。實質是將scale變換設置為-1惯殊。

keyExtractor

(item: object, index: number) => string

用于對給定的item在指定的索引提取唯一Key。Key用于緩存并且作為React追蹤item重新排序也殖。

numColumns

多列布局只能在非水平模式(即horizontal={false})土思。此時組件內(nèi)元素會從左到右從上到下按Z字形排列,類似啟用了 flexWrap 的布局。組件內(nèi)元素必須是等高的己儒,暫時還無法支持瀑布流布局崎岂。

onEndReached

(info: {distanceFromEnd: number}) => void

當列表被滾動到距離內(nèi)容最底部不足 onEndReachedThreshold 的距離時調用。

onEndReachedThreshold

決定當距離內(nèi)容最底部還有多遠時從用觸發(fā) onEndReached 回調闪湾。注意此參數(shù)是一個比值而非像素單位冲甘。比如, 0.5表示距離內(nèi)容最底部的距離為當前列表可見長度一般時觸發(fā)。

onRefresh

() => void

如果寫了這個屬性,一個標準的 RefreshControl 將添加到 pull to Refresh 功能中俊性。確保同時正確的設置了 refreshing 屬性瘫里。

refreshing

{boolean.optional}

當刷新等待新數(shù)據(jù)到來時將其設置為true

onViewableItemsChanged

(info: {
  viewableItems: array,
  changed: array
}) => void

在可見行元素變化時調用√厮瘢可見范圍和變化頻率等參數(shù)的配置請設置 viewabilityConfig 屬性。

還有幾個屬性在此省略,可參考官網(wǎng)律适,下面是方法:

scrollToEnd([params])

滾動到內(nèi)容的底部,如果不設置 getItemLayout 屬性的話遏插,可能會比較卡捂贿。

scrollToIndex(params: object)

將位于指定位置的元素滾動到可視區(qū)的指定位置,當 viewPosition 為 0 時將它滾動到屏幕頂部胳嘲,為 1 時將它滾動到屏幕底部厂僧,為 0.5 時將它滾動到屏幕中央。

如果不設置 getItemLayout 屬性的話了牛,無法跳轉到當前可視區(qū)域以外的位置颜屠。

scrollToItem(params: object)

這個方法會順序遍歷元素。盡可能使用 scrollToIndex.如果不設置 getItemLayout 屬性的話鹰祸,可能會比較卡甫窟。

scrollToOffset(params:object)

滾動列表到指定的偏移(以像素為單位),等同于 ScrollViewscrollTo 方法蛙婴。

recodeInteraction()

主動通知列表發(fā)生了一個事件粗井,以使列表重新計算可視區(qū)域。比如說當 waitForInteractions={true} 并且用戶沒有滾動列表時街图,就可以調用這個方法浇衬。不過一般來說,當用戶點擊了一個列表項餐济,或發(fā)生了一個導航動作時耘擂,我們就可以調用這個方法。

flashScrollIndicators()

短暫的顯示滾動指示器

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颤介,一起剝皮案震驚了整個濱河市梳星,隨后出現(xiàn)的幾起案子赞赖,更是在濱河造成了極大的恐慌,老刑警劉巖冤灾,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件前域,死亡現(xiàn)場離奇詭異,居然都是意外死亡韵吨,警方通過查閱死者的電腦和手機匿垄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來归粉,“玉大人椿疗,你說我怎么就攤上這事】返浚” “怎么了届榄?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長倔喂。 經(jīng)常有香客問我铝条,道長,這世上最難降的妖魔是什么席噩? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任班缰,我火速辦了婚禮,結果婚禮上悼枢,老公的妹妹穿的比我還像新娘埠忘。我一直安慰自己,他們只是感情好馒索,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布莹妒。 她就那樣靜靜地躺著,像睡著了一般绰上。 火紅的嫁衣襯著肌膚如雪动羽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天渔期,我揣著相機與錄音,去河邊找鬼渴邦。 笑死疯趟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谋梭。 我是一名探鬼主播信峻,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓮床!你這毒婦竟也來了盹舞?” 一聲冷哼從身側響起产镐,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踢步,沒想到半個月后癣亚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡获印,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年述雾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兼丰。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡玻孟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳍征,到底是詐尸還是另有隱情黍翎,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布艳丛,位于F島的核電站匣掸,受9級特大地震影響,放射性物質發(fā)生泄漏质礼。R本人自食惡果不足惜旺聚,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眶蕉。 院中可真熱鬧砰粹,春花似錦、人聲如沸造挽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭入。三九已至嵌器,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谐丢,已是汗流浹背爽航。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乾忱,地道東北人讥珍。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像窄瘟,于是被迫代替她去往敵國和親衷佃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案蹄葱? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,741評論 1 92
  • 兩只幼龜入住第三天邻邮。 我不知道它們是不是已適應這里了?說適應這里吮螺,它們潛水離家出走饶囚,倒挺活潑,能爬能翻鸠补。說不適應這...
    秕蒙閱讀 244評論 0 0
  • 她和他情投意合紫岩,于是她就嫁給了他规惰。 她愛他,于是她想為他生一個長得像他一樣的孩子泉蝌。 每一個為愛而生孩子的女人歇万,是不...
    陳若黎閱讀 167評論 0 3