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)榛疑?背景色也會變灰
查看源碼會發(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 是
VirtualizedList
和ScrollView
的一層封裝磁餐,同時繼承了這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之間渲染,但是不會再頂部和底部渲染伴箩。默認會提供 highlighted
和 leadingItem
屬性入愧。上面的 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)
滾動列表到指定的偏移(以像素為單位),等同于 ScrollView
的 scrollTo
方法蛙婴。
recodeInteraction()
主動通知列表發(fā)生了一個事件粗井,以使列表重新計算可視區(qū)域。比如說當 waitForInteractions={true}
并且用戶沒有滾動列表時街图,就可以調用這個方法浇衬。不過一般來說,當用戶點擊了一個列表項餐济,或發(fā)生了一個導航動作時耘擂,我們就可以調用這個方法。
flashScrollIndicators()
短暫的顯示滾動指示器