[ํด๋ผ์ฐ๋ฉ ์ดํ๋ฆฌ์ผ์ด์ ์์ง๋์ด๋ง TIL] 240419 - React Native ์บ ํ์ฑ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ (3)
Intro
3์ผ์ฐจ์๋ Article ํ์ด์ง๋ฅผ ๊ตฌํํ์๋ค. firebase๋ฅผ ์ฐ๋ํ ์์ ์ด๋ผ ํ๋ก์ ํธ์์ ์ ๊ณต๋ API๋ ๋ถ๋ฌ์ค์ง ์์๋ค.
โ Article UI ๊ตฌํ
โก๏ธ Home UI ๊ตฌํ
โ ๋ฌดํ ์คํฌ๋กค์์ ๋ฐ์ํ๋ ์ค๋ฅ ํด๊ฒฐ
ํ๋ก์ ํธ ์งํ์ํฉ
ImageBackground
์ํฐํด ํค๋๋ก ์ฐ์ด๋ ๊ฐ์ข ์บ ํ ์ ๋ณด ๋ฐ์ค๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉํ ์ปดํฌ๋ํธ
์ด๋ฏธ์ง๊ฐ ๋ค์ด๊ฐ ๋ฐ์ค๋ฅผ ๋ง๋ค๊ณ ์ถ์ด์ react-native์ ImageBackground ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด๋ณด์๋ค.
import { ImageBackground, ...
} from 'react-native';
<ImageBackground
source={require('../../assets/articleLogoImg.png')}
style={styles.articleLogo}
imageStyle={styles.articleLogoImg}>
<Text style={styles.articleLogoTitle}>๊ฐ์ข
์บ ํ ์ ๋ณด</Text>
<Text style={styles.articleLogoComment}>
์บ ํํฌ๊ฒ๋๊ฐ ์ ๊ณตํ๋ ๊ฐ์ข
๊ฟํ์ผ๋ก ์บ ํ์ ๋ ํ์ฑํ๊ฒ ์ฆ๊ฒจ๋ณด์ธ์.
</Text>
</ImageBackground>
์คํฌ๋กค ๋ด๋ฆด ๋ ํค๋ ์จ๊ธฐ๋ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
ํค๋๊ฐ ์ฌ์ด์ฆ๊ฐ ์ปค์ ๊ฒ์๊ธ์ด 1๊ฐ ๋ฐ๋ง ๋ณด์ด๋ ์ํฉ์ด๋ค. ์ฌ์ฉ์์ UI/UX๋ฅผ ๊ณ ๋ คํ์ ๋ ์ข์ง ์์ ๋ณด์๋ค.
ํค๋์ ํจ๊ป ์คํฌ๋กค์ ๋ด๋ฆฌ๋ฉด sort by๊ฐ ๊ฐ๋ ค์ง๊ธฐ ๋๋ฌธ์ UX๊ฐ ๋นํจ์จ์ ์ผ๋ก ๋ณด์๋ค.
์ด๋ฐ ์ํฉ์ ํด๊ฒฐํ๊ธฐ ์ํด ์คํฌ๋กค์ ๋ด๋ ธ์ ๋ sort by๋ ์ ์งํ๊ณ ํค๋๋ง ์ฌ๋ผ์ง๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๊ณ ์ ํ๋ค.
const [infoVisible, setInfoVisible] = useState(true);
const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
const currentOffset = event.nativeEvent.contentOffset.y;
if (currentOffset > 1 && infoVisible) {
setInfoVisible(false);
} else if (currentOffset <= 1 && !infoVisible) {
setInfoVisible(true);
}
};
์คํฌ๋กค์ด ๋ด๋ ค๊ฐ๋์ง ํ์ธํ๊ธฐ ์ํด contentOffset์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์๋ค.
<FlatList
data={sortedArticles}
removeClippedSubviews
showsVerticalScrollIndicator={false}
renderItem={({ item }) => <ArticleList {...item} />}
onScroll={handleScroll}
scrollEventThrottle={20}
/>
FlatList์ onScroll ์์ฑ์ ํ์ฉํด ์คํฌ๋กค์ด ๋ด๋ ค๊ฐ ๋ handleScroll ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๋๋ก ๊ตฌํํ์๋ค.
์์ฐ์ค๋ฝ๊ฒ ์ฌ๋ผ์ง๋ ค๋ฉด Animated ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์๋ฐ ์ผ๋จ ์ฌ๊ธฐ๊น์ง ๊ตฌํํด ๋ณด์๋ค.
์์ธํ์ด์ง ๊ตฌํํ๊ธฐ
์นด๋๋ฅผ ๋๋ ์ ๋ ํด๋น ๊ฒ์๊ธ์ ์์ธ ํ์ด์ง๋ก ์ด๋ํ๋ ํ๋ฉด์ ๊ตฌํํ์๋ค.
๊ฒ์๊ธ ๋ฐ์ดํฐ๋ react-navigation์ route ์์ฑ์ผ๋ก params๋ฅผ ๋๊ฒจ์ฃผ์๋ค.
์ต์ ์/์ฆ๊ฒจ์ฐพ๊ธฐ์ ๋ชจ๋ฌ์ฐฝ ๊ตฌํํ๊ธฐ
๋ชจ๋ฌ์ฐฝ ๊ตฌํ์ ์ํด react-native-modal ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋ค.
์ต์ ์/์ฆ๊ฒจ์ฐพ๊ธฐ์ ์ ํ ํ Save ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ชจ๋ฌ์ด ๋ซํ๋ฉด์ ๋ง์ฝ์ ์ต์ ์ -> ์ฆ๊ฒจ์ฐพ๊ธฐ์ ๋๋, ์ฆ๊ฒจ์ฐพ๊ธฐ์ -> ์ต์ ์์ผ๋ก ๋ฐ๋์๋ค๋ฉด ํ์ด์ง๊ฐ ๋ค์ ๋ก๋๋๋๋ก ๊ตฌํํ์๋ค.
์ถํ ์งํ์ฌํญ
๋ค์ ์์ ํด์ผ ํ ๊ฒ๋ค
- Home UI ๊ตฌํ
- Community UI ๊ตฌํ
- ๋ก๊ทธ์ธ/ํ์๊ฐ์ ๊ตฌํ