๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Mobile
React Native
04-react-navigation

1. React Navigation

1
yarn add @react-navigation/native
2
3
# expo ์‚ฌ์šฉ ์‹œ ์ถ”๊ฐ€ ์„ค์น˜
4
yarn add react-native-screens react-native-safe-area-context
5
6
# cf. https://reactnavigation.org/docs/hello-react-navigation#installing-the-native-stack-navigator-library
7
yarn add @react-navigation/native-stack
  • React-Native์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ™”๋ฉด ์ด๋™์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Stack, BottomTab, Drawer๋“ฑ ์•ฑ ๊ฐœ๋ฐœ์‹œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํ™”๋ฉด ์ด๋™์— ๋Œ€ํ•ด,
  • ๊ตฌ์„ฑ์š”์†Œ : Navigator + Screen
    • Navigator : Navigation์ด ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ์ปดํฌ๋„ŒํŠธ (Screen์˜ ์ง‘ํ•ฉ)
    • Screen : ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์ปดํฌ๋„ŒํŠธ

1.1 Stack Navigator

  • Stack๊ณผ ๋™์ผํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” Navigator
  • ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ํ™”๋ฉด์ด ์ œ์ผ ๋จผ์ € ์—†์–ด์ง
  • React-Navigation์—์„œ ํ•„์š”ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜๋“ฑ์€ ๊ตฌํ˜„ ๋จ
  • Stack Navigator : JS๋กœ ์ž‘์„ฑ, ์ž์œ ๋„ ๋†’์Œ
  • Native Stack Navigator : Native๋กœ ์ž‘์„ฑ ์ž์œ ๋„ ๋‚ฎ์Œ

1.2 Drawer Navigator

  • ์Šฌ๋ผ์ด๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ด๋™ํ•  Screen๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” Navigator
  • Drawer์— ๋Œ€ํ•œ open, close, toggle๋“ฑ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ํ•จ์ˆ˜๋กœ ์ œ๊ณต
  • Gmail, LinkedIn๋“ฑ์—์„œ ์‚ฌ์šฉ

1.3 Tab Navigator

1
# https://reactnavigation.org/docs/tab-based-navigation
2
yarn add @react-navigation/bottom-tabs
  • ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์•ฑ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” UI
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‹จ์— ํƒญ์˜ ํ˜•ํƒœ๋กœ ์ œ๊ณต
  • Material UI๋ฅผ ํ†ตํ•ด์„œ ์ œ๊ณตํ•˜๋Š” ๋ณ„๋„ UI๋„ ์ œ๊ณต
    • (Material Bottom Tabs Navigator, Material Top Tabs Navigator)

2. React Life cycle

  • constructor โ†’ render โ†’ componentDidMount โ†’ componentWillUnmount

3. ์šฉ์–ด ์ •๋ฆฌ

  1. Navigator
    • ํ™”๋ฉด์„ ์–ด๋–ป๊ฒŒ ๊ทธ๋ ค์ค„์ง€ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ (e.g. ์ฑ… ๊ฒ‰ํ‘œ์ง€)
    • Navigation Container : ์ „์ฒด Navigator๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์—ญํ• 
  2. Router
    • Navigation์˜ ์ƒํƒœ๋‚˜ ๋™์ž‘์„ ์ œ์–ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ.
    • ์ฃผ๋กœ ํ™”๋ฉด๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•ด ์‚ฌ์šฉ
  3. Screen : ํ™”๋ฉด์„ ๊ทธ๋ ค์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ (e.g. ์ฑ…์—์„œ ์ข…์ด ํ•œ์žฅ)
  4. Navigation Prop : ํ™”๋ฉด ์ด๋™์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋“ค์„ ๊ณตํ†ต์œผ๋กœ ์ œ๊ณต
  5. Route Prop : ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ฑฐ๋‚˜ ์–ด๋–ค ํ™”๋ฉด์ธ์ง€ ์ด๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์—ญํ™œ
  6. Navigation State
    • ํ˜„์žฌ React Navigation์ด ์–ด๋–ค ์ƒํƒœ์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฐ’
    • ์ฃผ๋กœ Stack Navigator ์ด์ „ Stack์— ์–ด๋–ค Screen์ด ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  7. Route
    • Screen์˜ Name, Key, Param๋“ฑ์„ ์ €์žฅํ•˜๋Š” ๊ฐœ๋…
    • ์–ด๋–ค ํ™”๋ฉด์ธ์ง€ ์‹๋ณ„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
    • Navigation State ํ•˜์œ„์— Routes๋ผ๋Š” ๋ฐฐ์—ด์—์„œ ์ฐพ์„์ˆ˜ ์žˆ์Œ

4. Stack Navigator Screen ์˜ต์…˜

4.1 presentation

  • Stack Navigator์—์„œ ํ™”๋ฉด ์ด๋™ ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ์„ค์ • ์˜ต์…˜
    • Card : ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜
    • Modal : ์•„๋ž˜์—์„œ ์œ„๋กœ ์ด๋™ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜

4.2 backBehavior

  • Android์—์„œ H/W Back Button์„ ๋ˆŒ๋ €์„๋•Œ ์–ด๋–ป๊ฒŒ ์ด๋™ ํ•˜๋Š”์ง€ ์ง€์ •
    • firstRoute : ์„ ์–ธ์ƒ ์ œ์ผ ์ฒ˜์Œ์— ์žˆ๋Š” ํƒญ์œผ๋กœ ์ด๋™
    • initialRoute : ์ตœ์ดˆ ์ง€์ •ํ•œ ํƒญ์œผ๋กœ ์ด๋™
    • order : ํƒญ์„ ์„ ์–ธํ•œ ์ˆœ์œผ๋กœ ์ด๋™
    • history : ์ด๋™ํ•œ ํžˆ์Šคํ† ๋ฆฌ ์—ญ์ˆœ์œผ๋กœ ์ด๋™

5. Nesting Navigator

  • Navigator์˜ Screen์„ Component๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ Navigator๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ.
  • ์ฃผ๋กœ, Presentation์„ ๋‹ค๋ฅด๊ฒŒ ์„ ์–ธํ•˜๊ฑฐ๋‚˜, ์กฐ๊ฑด์— ๋”ฐ๋ผ Navigator์˜ ๋ถ„๊ธฐ๊ฐ€ ํ•„์š”ํ• ๋•Œ ์‚ฌ์šฉ

5.1 ์ฃผ์˜์ 

1
A ๋„ค๋น„๊ฒŒ์ดํ„ฐ โ†’ C ์Šคํฌ๋ฆฐ
2
โ†’ B ๋„ค๋น„๊ฒŒ์ดํ„ฐ โ†’ D ์Šคํฌ๋ฆฐ
  • Navigator๋Š” ๊ฐ์ž์˜ History๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • Navigator์—์„œ Screen Param์€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ
  • B Navigator์—์„œ ๋™์ž‘ํ• ์ˆ˜ ์—†์œผ๋ฉด A Navigator๋กœ ์ „๋‹ฌ
  • Navigator A์˜ ์ด๋ฒคํŠธ๋ฅผ Navigator B์—์„œ ๋ฐ›์•„ ๋ณผ ์ˆ˜๋Š” ์—†์Œ
    • focus, blur๋“ฑ. ํ•„์š”ํ•œ ๊ฒฝ์šฐ getParent๋กœ ์ฐพ์•„ ๋“ฑ๋กํ•ด์•ผ ํ•จ
  • Tab, Drawer์˜ ํ•˜์œ„ Navigator์ผ ๊ฒฝ์šฐ Tab ๋˜๋Š” Drawer์— ๊ฐ€๋ ค์ง

6. DeepLink

1
https://abc.com/def
2
3
https:// =====> Scheme
4
abc.com/def =====> Path
  • ํŠน์ • URL์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ์ง€์ •ํ•œ ํ™”๋ฉด์œผ๋กœ ์ด๋™ ํ•˜๋Š”๊ฒƒ.
  • ์•ฑ๋งˆ๋‹ค ์œ ํšจํ•œ scheme์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒƒ

6.1 Universal Link, App Links

  • ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ DeepLink๋Š” App Links๋กœ ๋ถ€๋ฅด๊ณ ,
  • iOS์—์„œ DeepLink๋Š” Universal Link๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๋ฌด๋‹จ์œผ๋กœ Scheme์„ ๋นผ์•—์•„ ๊ฐ€๋Š” ํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•จ
  • ๊ฐ๊ฐ ํ”Œ๋žซํผ์—์„œ์˜ ๋„๋ฉ”์ธ ์ธ์ฆ๋‹จ๊ณ„๋ฅผ ํ†ต๊ณผ ํ•ด์•ผํ•จ

7. Action

  • ํ™”๋ฉด ์ด๋™์— ๋Œ€ํ•œ ๋ช…๋ น์–ด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Object
  • e.g. ์ฑ…์—์„œ N ํŽ˜์ด์ง€๋กœ ์ด๋™, ์ด์ „ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋“ฑ

7.1 Action ๊ตฌ์กฐ

  • type : ์–ด๋–ค ์ž‘์—…์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ์‹๋ณ„์ž
  • payload : ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์Œ. (parameter)

7.2 CommonAction

  • navigate : ํŠน์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” action
  • reset : ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•œ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” action
  • goBack : ์ด์ „ ํžˆ์Šคํ† ๋ฆฌ๋กœ ์ด๋™ํ•ด์ฃผ๋Š” action

7.3 StackAction

  • push : ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ์ตœ์ƒ๋‹จ์— ๋„ฃ๋Š”๊ฒƒ
  • pop : ํ˜„์žฌ ๋ณด์ด๊ณ  ์žˆ๋Š” ํ™”๋ฉด์„ ๊บผ๋‚ด๋Š”๊ฒƒ

7.4 StackAction push vs CommonAction navigate

  • push : ์ œ์ผ ๋งˆ์ง€๋ง‰ ํ™”๋ฉด์œผ๋กœ ๊ณ„์† ๋„ฃ๋Š” Action
  • navigate : ์ด์ „ Stack์— ๋™์ผํ•œ Screen์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด pop์•ก์…˜๋„ ์ˆ˜ํ–‰

7.4 TabAction

  • jumpTo : ํƒญ๊ฐ„ ์ด๋™ ํ•ด์•ผ ํ• ๋•Œ ์‚ฌ์šฉ