[ํด๋ผ์ฐ๋ฉ ์ดํ๋ฆฌ์ผ์ด์ ์์ง๋์ด๋ง TIL] 240417 - React Native ์บ ํ์ฑ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ (1)
Intro
๋ฐ๋ธ์ฝ์ค ๋ง์ง๋ง ๊ฐ์ธํ๋ก์ ํธ๊ฐ ์์๋์๋ค.
16์ผ๋ถํฐ์๋๋ฐ ๊ฐ์ ๋ฃ๋๋ผ 17์ผ ์ ๋ ๋ถํฐ ์์..
์ด๋ฒ์ Figma๋ก UI ๋์์ธ์ด ์ฃผ์ด์ก๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ฐ์ธ ํ๋ก์ ํธ ๋ชฉํ๋ ์ต๋ํ ๋์์ธ๊ณผ ๋๊ฐ์ด ๊ตฌํํ๋ ๋ฐ์ ์๋ค.
์ฃผ์ด์ง ๋์์ธ์ ๋๊ฐ์ด ๊ตฌํํ๋ ๊ฒ์ด ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๋ฅ๋ ฅ ์ค ํ๋๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค...!
ํ๋ก์ ํธ ์งํ์ํฉ
์ฝ๋ฉํ ์คํธ ๊ฐ์์ Nodejs express ๊ฐ์๋ฅผ ๋ฃ๋ค๊ฐ ๋ค์ React Native๋ฅผ ํ๋ ค๋ ์๊ฐ ์ด๋ป๊ฒ ํ๋๋ผ...? ๊ธฐ์ต์ด ์๋ฌ๋ค.
์ด์ ์ React Native ๊ณต๋ถํ๋ฉด์ ๊ธฐ๋กํด ๋์ ๊ฒ๋ค ๋ค์ ๋ณด๋ฉด์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ ์์,
์ ๋ฒ ํ๋ก์ ํธ์์๋ ์ฌ์ฉํ๋ ํด์ธ Linear๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐํด์ผ ํ ์ฌํญ๋ค์ ๋์ดํ๊ณ ์ด์ ๊ด๋ฆฌ๋ฅผ ํ์๋ค.
https://linear.app/docs/get-the-app
Download Linear – Linear Docs
Linear is available on browsers, macOS, and Windows.
linear.app
react-native ํ๋ก์ ํธ ์ธํ
npx react-native@latest init SNSProject
๊ฐ์ฅ ๋จผ์ ๊ตฌํํ ๊ฒ์ ํ์ด์ง ๋ผ์ฐํ ๊ธฐ๋ฅ์ด์๋ค.
๊ทธ๋ฌ๊ธฐ์ํด react-native-navigation ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ค.
react-native navigation
# ๊ธฐ๋ณธ ์ค์น
npm install @react-navigation/native
npm install react-native-screens react-native-safe-area-context
npx pod-install ios
ํ์ด์ง ๋ผ์ฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด App.js์ ๋ค์๊ณผ ๊ฐ์ด NavigationContainer ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import Router from './src/router';
function App(): React.JSX.Element {
return (
<NavigationContainer>
<Router />
</NavigationContainer>
);
}
export default App;
๋ค์ ํ์ด์ง๋ก ์ด๋ํ ๋ ํ์ด์ง๋ฅผ ์์ ์ฌ๋ฆฌ๋ ์์ผ๋ก ๊ตฌํ๋๋ ์คํ ๋ค๋น๊ฒ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํ๋ค.
# navigation stack
npm install @react-navigation/native-stack
const Router = () => {
return (
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="MainTab" component={MainTab} />
</Stack.Navigator>
);
};
ํ๋จ ํญ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํ๋ค.
npm install @react-navigation/bottom-tabs
const MainTab = () => {
return (
<Tab.Navigator
tabBar={renderTabBar}
screenOptions={{
headerShown: false,
}}>
<Tab.Screen name="camping" component={HomeTab} />
<Tab.Screen name="community" component={CommunityPage} />
<Tab.Screen name="article" component={ArticlePage} />
<Tab.Screen name="settings" component={SettingsPage} />
</Tab.Navigator>
);
};
์ด์ ์ฌํญ
ios pod ์ด๊ธฐํ
๋ชจ๋ ์ค์น๊ฐ ์๋ฃ๋ ํ, ios์์ pod install์ ํด์ฃผ์ด์ผ ํ๋๋ฐ pod install์ ์งํํ์์๋ ์ ๋๋ก ์ ์ฉ๋์ง ์๊ฑฐ๋ ์ค๋ฅ๋ก ์ฑ์ด ์ด๋ฆฌ์ง ์์ ์ผ์ด ๊ฐ๋ ๋ฐ์ํ๋ค.
์ด์ ์ pod์ ์บ์๊ฐ ๋จ์์์ด์ ๋ฐ์ํ ๋ฌธ์ ์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ด ๊ฒฝ์ฐ์ pod ์บ์๋ฅผ ์ง์ฐ๊ณ ์ด๊ธฐํ๋ฅผ ํ ํ ๋ค์ pod install์ ์งํํด์ผ ํ๋ค.
pod deintegrate
pod cache clean --all
pod install
bottom tab bar UI
์์ฒ๋ผ ๊ตด๊ณก์๋ ๋ฐ์ค๋ฅผ ๊ตฌํํ๊ณ ์ถ์ด์ ๋ฐ์ค ๋ ๊ฐ๋ฅผ ๋ถ์ฌ ์ผ์ชฝ ์ค๋ฅธ์ชฝ์ border-radius๋ฅผ ์ ์ฉํด๋ณด๋ ์์ผ๋ก ๊ตฌํ์ ํ๋๋ฐ ์ํ๋ ๋๋ก ๋์ค์ง ์์ ๋ฉํ ๋๊ป ์ฌ์ญค๋ณด๋ ๊ตด๊ณก์ด 2๊ฐ๊ฐ ์๋ 3๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ค๋ฅผ ์ด์ด๋ถ์ด๋ ์์ผ๋ก๋ ๊ตฌํ์ด ์ด๋ ต๋ค๊ณ ํ์ จ๋ค.
SVG๋ก ๊ฐ์ ธ์ ์ฒ๋ฆฌํ์ จ๋ค๊ณ ํ๋๋ฐ react-native์์ SVG๋ฅผ ์ฐ๋ ค๋ฉด ๋ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํด์ ์ผ๋จ ์ค์ํ ๊ฐ๋ฐ๋ถํฐ ๋๋ด๊ณ ์งํํ๋ ค๊ณ ํ๋ค.
์ถํ ์งํ์ฌํญ
4/18 TODO
- ๊ณต๊ณต๋ฐ์ดํฐ API ๋ถ๋ฌ์ค๊ธฐ
- Home ํ๋ฉด ๊ตฌํํ๊ธฐ
- Article ํ๋ฉด ๊ตฌํํ๊ธฐ