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
์ ๋ถํ๋ฅผ ๊ฐ์์ํฌ ์ ์์ต๋๋ค.