FlatList
μμ λ§μ μμ λ°μ΄ν°λ₯Ό λΆλ¬μ¬ λ, μ΄λ»κ² μ΅μ νλ₯Ό μ ννλμ§ μμλ³΄κ³ μ ν©λλ€.
react-native
νλ‘μ νΈμμ FlatList λΆλΆμ μ΄ν΄λ³΄λ©΄ μμ μ»΄ν¬λνΈλ‘ λμ΄ μλ κ²μ νμΈν μ μμ΅λλ€.- λ°λΌμ
FlatList
λ₯Ό κ°μΈκ³ μλ λΆλͺ¨ μ»΄ν¬λνΈμμ λ΄λ €μ£Όλprops
λ€ μ€ λΆλͺ¨ μ»΄ν¬λνΈμμ μ μνλ μ½λ°±ν¨μλ€μ μ΅λͺ ν¨μκ° μλuseCallback
μΌλ‘ κ°μΈμ£Όλ©΄, λΆλͺ¨ μ»΄ν¬λνΈμ λ λλ§μΌλ‘ μΈνFlatList
μ λΆνμν 리λ λλ§μ μ€μΌ μ μμ΄ μ΅μ νμ λμμ΄ λ©λλ€. - λν
FlatList
μ μμ΄ν μ΄ λλ μ»΄ν¬λνΈμmemo
λ₯Ό μ μ©νμ¬ μμ μ»΄ν¬λνΈλ‘ λ§λ€μ΄μ£Όμ΄, λΆνμν 리λ λλ§μ λ°©μ§ν μ μμ΅λλ€.
- memoλ μ»΄ν¬λνΈλ₯Ό 리ν΄νλ κ³ μ°¨ μ»΄ν¬λνΈ(HOC)μ
λλ€. μΈμλ‘ λ€μ΄μ¨ μ»΄ν¬λνΈλ₯Ό μμ μ»΄ν¬λνΈλ‘ λ§λ€μ΄ μ€λλ€. μμ μ»΄ν¬λνΈλ
props
κ° λ³νκ±°λ λ΄λΆstate
κ° λ³ν λλ§ λ¦¬λ λλ§λ©λλ€.
const PhotoView = memo(({photo, onPress, selected}: PhotoViewProps) => {
//
}
PhotoView
μprops
μΈonPress
μ μ ν΄μ§λonPressPhoto
μ½λ°±ν¨μ μμuseCallback
μΌλ‘ κ°μΈμ£Όμ΄μ,PhotoView
μ λΆνμν 리λ λλ§μ λ§μμ€λλ€.
const onPressPhoto = useCallback((photo: Photo) => {
setPhotoIds(([...draft]) => {
const idx = draft.indexOf(photo.id);
if (idx > -1) {
draft.splice(idx, 1);
} else {
draft.push(photo.id);
}
return draft;
});
}, []);
const renderItem: ListRenderItem<Photo> = useCallback(
({item}) => (
<PhotoView
selected={photoIds.indexOf(item.id) > -1}
photo={item}
onPress={onPressPhoto}
/>
),
[photoIds, onPressPhoto],
);
SubView
(μμ)κ°SuperView
(λΆλͺ¨)μ μμκ³Ό κ²ΉμΉλ μμμ΄ μλ€λ©΄ λ€μ΄ν°λΈ κ³μΈ΅ λλ‘μ΄μμ ν΄λΉ SubViewλ₯Ό μ κ±°(detach)ν©λλ€. νμ§λ§ μ κ±°λSubView
μ λ©λͺ¨λ¦¬κ°deallocated
λμ§ μμ΅λλ€.
- μ»΄ν¬λνΈ λ¦¬μ€νΈμμ μ»΄ν¬λνΈμ μμκ° λ°λκ±°λ μμ λλ λ±μ μμ μ ν λ μ΅μ νλ μμ μ΄ μΌμ΄λ μ μλλ‘ κ° μ»΄ν¬λνΈλ₯Ό ꡬλΆν΄μ£Όλ μν μ ν©λλ€. λν λ λλ§λ μμ΄ν μ λμ΄λ₯Ό μ μ₯νλ ν€λ‘λ μ¬μ©λ©λλ€.
- 리μ€νΈμ λμ΄μ λλΉλ₯Ό 미리 νμ ν μ μμ΅λλ€.
getItemLayout
μ΄ μ 곡λμ§ μμΌλ©΄ κ°Cell
μ»΄ν¬λνΈμonLayout
ν¨μκ° μ λ¬λ©λλ€.onLayout
ν¨μλ λ λλ§ λλCell
μ»΄ν¬λνΈμ λμ΄λ₯Ό μ μ₯νκ³ λ¦¬μ€νΈ μ 보λ₯Ό κ°±μ νλ λ¬΄κ±°μ΄ λ‘μ§μ μνν©λλ€. μ΄λ₯Ό ν΅ν΄ κ° μμ΄ν μ΄ λ λλ§ λ λ λ μ΄μμ κ³μ° κ³Όμ μ΄ μ€μ΄λ€μ΄ μ΅μ νμ λμμ΄ λ©λλ€.
- νμ¬
viewport
λμ΄λ₯Ό 1λ‘ μ‘κ³ μμ΄ν μ λ λλ§ν λ²μλ₯Ό κ²°μ ν μ μμ΅λλ€. ν΄λΉ λ²μ λ΄μ μλ μ»΄ν¬λνΈλ€μ λ λλ§μ μλνκ² λ©λλ€. μ΄ μ«μλ₯Ό μ€μμΌλ‘μ¨ νλ²μ λ λλ§λλ μ»΄ν¬λνΈμ μ«μλ₯Ό μ€μΌ μ μμ΅λλ€.
FlatList
λ΄λΆμμ μ¬μ©λκ³ μλVirtualizedList
μprops
μ λλ€.batch
λΉ λ λλ§λ μμ΄ν μ μλ₯Ό μ‘°μ ν μ μμ΅λλ€.
- μ²μ λ λλ§ν
FlatList
μμ΄ν μ κ°μλ₯Ό μ‘°μ ν μ μμ΅λλ€. λλ°μ΄μ€ ν¬κΈ°κ° μ‘°κΈμ© λ€λ₯΄λ―λ‘, ν νλ©΄μ λ€μ΄κ° μ μλ μμ΄ν μ μλ λ¬λΌμ§ μ μκΈ° λλ¬Έμ μ μ ν κ°μλ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
μ΅μ ν λ°©λ² 3. react-native-fast-imageμ μ¬μ©
FlatList
μμRender window
λ₯Ό λ²μ΄λ μ»΄ν¬λνΈλ μΈλ§μ΄νΈλ©λλ€. μΈλ§μ΄νΈλ μ»΄ν¬λνΈλ λ€μRender window
μ λ€μ΄μμ λ λ§μ΄νΈλ©λλ€.FlatList
μ μμ μ»΄ν¬λνΈκ° λ§μ½ μ΄λ―Έμ§λ₯Ό ν¬ν¨νλ€λ©΄ λ§€λ² μλ‘μ΄ λ€νΈμν¬ μμ²μ νκ²λ©λλ€.FastImage
λ₯Ό μ μ©νλ©΄ μΊμλ μ΄λ―Έμ§λ₯Ό μ¬μ©νμ¬ λΆνμν λ€νΈμν¬ μμ²μ 건λλ°κ³ , λΉ λ₯Έ μ΄λ―Έμ§ λ‘λ©μΌλ‘JS Thread
μ λΆνλ₯Ό κ°μμν¬ μ μμ΅λλ€.