1. ์ปดํฌ๋ํธ
1.1 ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ
- ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ์ด์ , ์ฌ์ฌ์ฉ์ฑ
- ์ปดํฌ๋ํธํ ํ์ง ์๊ณ ๋ง๋ค๋ค ๋ณด๋ฉด ๋๋ฌด ๋ง์ ์ฝ๋ ์์ผ๋ก ์ ์ง๋ณด์ ๋์ด๋ ์ฆ๊ฐ
- ๋๋ฌด ์ฆ์ ์ปดํฌ๋ํธํ๋ ์์ํ์ง ๋ชปํ ๋ณ๊ฒฝ์ ์ด ์๊ฒจ ๋ฒ๊ทธ๋ก ์ด์ด์ง
1.2 Atomic Design Pattern
- ์์๋จ์๋ถํฐ ํฐ ๋จ์๊น์ง์ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํด ๋ง๋ค์ด๊ฐ๋๊ฒ
- Lego์กฐ๋ฆฝํ๋๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋
1.3 Dumb component vs Smart component
Dumb component: ๋ณด์ฌ์ฃผ๋ ์ผ์๋ง ์ง์ค- e.g. Card ์ปดํฌ๋ํธ : ๊ทธ๋ฅ ํ ์คํธ๋ฅผ ์นด๋ ํํ๋ก ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํจ
Smart component: ์ํ๋ฅผ ๊ฐ์ง๊ณ ์ค์ค๋ก ๋ณํจ- e.g. Dropdown ์ปดํฌ๋ํธ : openํด์ ๋ง์ง๋ง์ผ๋ก ์ ํํ ์ํ๊ฐ์ ๋ณด์ฌ์ค
1.4 ์ธ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ์ฌ์ฌ์ฉ ํ๋๊ฐ
- ์ ์ผ ์์ ๋จ์๋ ์ฐ์ ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ก ๋ง๋ค์ด ์ฌ์ฌ์ฉ
- Molcule์ด์์ ๋จ๊ณ๋ค์ค์์ 3ํ์ด์ ๋ฐ๋ณต๋๋ฉด ์ปดํฌ๋ํธ๋ก ๋ง๋ฆ
2. Hooks
- react 16.8 ๋ฒ์ ์์ ์๋ก ์๊ฐ
- functional component์์๋ state์ ๊ธฐํ ๋ค๋ฅธ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ํ์
2.1 functional component
- hook ํ์ ์ด์ ์๋ state๋ฅผ ๊ฐ์ง ์๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก dumb component๋ก๋ง ํ์ฉ
- hook์ ๋ฑ์ฅ์ผ๋ก ์ฃผ๋ชฉ๋ฐ๊ธฐ ์์
2.2 ์ hook์ ๋ง๋ค์๋๊ฐ ?
(1) ์ปดํฌ๋ํธ๊ฐ ์ํ ๊ด๋ จ ๋ก์ง ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ค์
- ๋งค๋ฒ ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ก์ง์ Copy & Paste
- ๊ณตํตํ ๋์ง ์๋ค๋ณด๋ ์ปดํฌ๋ํธ ๋ง๋ค ๋ณ๊ฒฝ์ฌํญ์ ์์ ํด์ผ ํ๋ ์ด๋ ค์
(2) ์ปดํฌ๋ํธ๊ฐ ์ปค์ง์๋ก ๋ณต์กํด์ง๋ ๋ก์ง
- componentDidmount์์ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฒ ๋จ
- e.g. ์ปดํฌ๋ํธ ๋ง์ดํธ์ api ํธ์ถ ๋ฐ event listener๋ฅผ subscribe
- ๋จ์ผ ์ฑ ์ ์์น(SRP)์์ ๋ฒ์ด๋๊ฒ ๋๋ ์ผ
(3) ํผ๋์ ์ฃผ๋ class
- class this ํค์๋์์ ์ค๋ ์ข์ง ๋ชปํ ๊ฒฝํ
2.3 hook ์ฌ์ฉ์ ๊ท์น
(1) ๋ชจ๋ hook์ ์ฌ์ฉํ ๋ ์ต์๋จ์์ ํธ์ถ ํ์ฌ์ผ๋ง ํจ
class ์ปดํฌ๋ํธ์ ๋์- component ์์ฑ ์ (Class ์์ฑํ์ฌ instance ์์ฑ)
- component ์ต์ด ๋ ๋ ์ (Class ๋ด๋ถ render method ํธ์ถ)
- component ์ ๋ฐ์ดํธ ์ (Class ๋ด๋ถ render method ํธ์ถ)
functional ์ปดํฌ๋ํธ์ ๋์(๋ ๋๋ง = ํจ์ํธ์ถ)- component ์์ฑ ์ (function ํธ์ถ)
- component ์ต์ด ๋ ๋ ์ (function ํธ์ถ)
- component ์ ๋ฐ์ดํธ ์ (function ํธ์ถ)
(2) React ํจ์์์๋ง hook์ ์ฌ์ฉ ํด์ผ ํจ
3. ์์ฃผ ์ฌ์ฉํ๋ hook
3.1 useWindowDimension
1export const ComponentA = props => {2const { window, height } = useWindowDimensions()3// {...etc code}4}
3.2 useBackHandler
1npm install @react-native-community/hooks
1export const ComponentA = props => {2useBackHandler(() => {3return true4})5// {...etc code}6}
3.3 useAppState
1npm install @react-native-community/hooks
1export const ComponentA = props => {2const currentAppState = useAppState() // active, background, inactive(only ios)3// {...etc code}4}
3.4 useNavigation, useRoute
1export const ComponentA = props => {2const navigation = useNavigation()3const routes = useRoute()4// {...etc code}5}
3.5 useIsFocused, useFocusEffect
1export const ComponentA = props => {2const isFocused = useIseFocused()3useFocusEffect(4useCallback(() => {5// focus ๊ฐ ๋์์๋์ ์ฒ๋ฆฌ6}, [userId]),7)8// {...etc code}9}
3.6 useScrollToTop
useScrollToTop: ScrollView๋ฅผ ์ต์๋จ์ผ๋ก ์ฌ๋ฆด๋ ์ฌ์ฉ
1export const ComponentA = props => {2const scrollViewRef = useRef()3useScrollToTop(scrollViewRef)4// {...etc code}5}
3.7 useMount
useMount: component๊ฐ mount๋ ์์ ์ callback ํธ์ถ
1export const ComponentA = props => {2useMount(() => {3// on mount ์ฒ๋ฆฌ4})5// {...etc code}6}
3.8 usePrevious
usePrevious: state์ ์ด์ ๊ฐ์ ์์๋ด๊ณ ์ ํ ๋ ์ฌ์ฉ
1export const ComponentA = props => {2const [count, setCount] = useState(0)3const prevCount = usePrevious(count)4// {...etc code}5}
4. ์ต์ ํ Memoization
4.1 Functional component
- ํจ์ ํธ์ถ์ ํ๋ฉฐ ์๊ธด ํจ์ ๋ด๋ถ์ ๋ณ์, ํจ์๋ฑ์ ๋ชจ๋ ํธ์ถ ๋ ๋๋ง๋ค ์๋ก ํ ๋นํ๊ฒ ๋จ
4.2 Memoization
- ์ํํ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ค์ ์ด๋๊ฐ ์ ์ฅํ๋ค ๋์ผํ ์
๋ ฅ๊ฐ ์ธ ๊ฒฝ์ฐ
์ฌํ์ฉํ๋๊ฒ
4.3 useMemo
1export const ComponentA = props => {2const variableA = useMemo(() => {}, [])3}
์ฒซ๋ฒ์งธ ์ธ์: ๊ธฐ์ตํ ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ ํจ์๋๋ฒ์งธ ์ธ์: dependency array
1export const ComponentA = props => {2//props.a = 1, props.b = 13const variableA = useMemo(() => {4return props.a + props.b5}, [props.a, props.b])6}
4.4 useCallback
1export const ComponentA = props => {2const variableA = useCallback(() => {}, [])3}
์ฒซ๋ฒ์งธ ์ธ์: ๊ธฐ์ตํ ํจ์๋ฅผ ๋ฆฌํดํด์ฃผ๋ ํจ์๋๋ฒ์งธ ์ธ์: dependency array