TIL_221230_ ๐Ÿšฉ React Native ๊ธฐ์ดˆ_todoList2

์ •์œค์ˆ™ยท2022๋…„ 12์›” 30์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
60/192
post-thumbnail

๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ 4๊ธฐ ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ React B๋ฐ˜


๐Ÿ“’ ์˜ค๋Š˜์˜ ๊ณต๋ถ€

1. React native ๊ธฐ์ดˆ ์‹ค๊ฐ•_2

  • StatusBar ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—†์œผ๋ฉด ios ๋Š” ์œ„์— ์‹œ๊ฐ„ ๋“ฑ์ด ์•ˆ ๋‚˜์˜ด
  • SafeAreaView style={{ flex: 1 }}
    • flex:1 ์„ ์•ˆ ์“ฐ๋ฉด ๋‚ด์šฉ์ด ์•„๋ž˜๋กœ stretch ๋˜์ง€ ์•Š์•„ ์ƒ๋‹จ์— ์••์ถ•๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„

โญ ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ ์ „์— ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์„ ์ฃผ์„์— ์ •๋ฆฌํ•˜๊ธฐ

  • ์„œ๋ฒ„ ์ƒˆ๋กœ๊ณ ์นจ
    • ํ„ฐ๋ฏธ๋„์— ์ปค์„œ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์—์„œ R ๋ˆ„๋ฅด๊ธฐ
  • mutable, immutable
    • filter๋Š” immutable์ด๋ผ todos๋ฅผ ์–•์€ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์จ๋„ ๋œ๋‹ค.
    • findIndex์˜ ๊ฒฝ์šฐ mutable์ด๋ผ ์–•์€ ๋ณต์‚ฌ ํ•„์š”

ํƒ€์ž„์–ดํƒ

Add Task

  • onSubmitEditing
    • ์—”ํ„ฐ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰
  • 10๋ถ„, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์งœ๊ณ  todo ์ถ”๊ฐ€ํ•˜๊ธฐ
    • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์งœ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ฐ์ด ์•ˆ ์žกํž˜
    • ์ถ”๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ์‹œ๋„
      -> input์— onSubmitEditing์— addTodo ํ•จ์ˆ˜๋ฅผ ๋„ฃ๊ณ  ํ•ด๋ดค๋Š”๋ฐ ์ž˜ ์•ˆ ๋จ..

๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ

  • ํŠœํ„ฐ๋‹˜ ์ฝ”๋“œ ๋”ฐ๋ผํ–ˆ๋Š”๋ฐ map๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜
    • todos.mapis notan object
    • const [todos, setTodos] = useState([]); useState๋ฅผ ์ด๋ ‡๊ฒŒ [] ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์ง€ ์•Š์•„์„œ ์ƒ๊ธด ์˜ค๋ฅ˜

๋ฌธ์ œ ๋ฐ ์‹œ๋„

  • ์˜ค๋ฅ˜๋Š” ์•ˆ ๋‚˜๋Š”๋ฐ ์ž…๋ ฅํ•œ ๊ฐ’์ด ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
    • log๋ฅผ ์ฐ์œผ๋ฉด ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์ด ๋ฐฐ์—ด๋กœ ์ž˜ ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๋ฐ ํ™”๋ฉด์— ๋œจ์ง€ ์•Š๋Š”๋‹ค.
    • ScrollView ๋‚ด๋ถ€๋ฅผ ํŠœํ„ฐ๋‹˜ ์ฝ”๋“œ๋กœ ๋ณต๋ถ™ํ•ด ์˜ค๊ณ  import ๋‹ค ํ•˜๋‹ˆ ๋œฌ๋‹ค.. ์ •๋ง ์Šคํƒ€์ผ ๋•Œ๋ฌธ์ธ๊ฐ€?!
    • ์ด ์ƒํƒœ์—์„œ ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์”ฉ ์ ์šฉํ•ด๋ณด๊ธฐ
      -> ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ์šฉํ•˜๊ณ  ๋‚˜๋ฉด null is not a n object(evaluating 'todos.map') ์ด๋ผ๋Š” ์˜ค๋ฅ˜

  • ์ด ๋ถ€๋ถ„์€ ํƒ€์ž„์–ดํƒ ํ•˜์ง€ ์•Š๊ณ  ํŠœํ„ฐ๋‹˜ ๋ผ์ด๋ธŒ์ฝ”๋”ฉ ๋ณด๋ฉด์„œ ์ดํ•ด

Set Category

  • useState๋กœ category ์„ค์ •
  • TouchableOpacity์˜ style์— ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

Set Done

  • ์ฒดํฌ ์•„์ด์ฝ˜์„ TouchableOpacity๋กœ ๊ฐ์‹ธ๊ณ  onPress๋กœ id๊ฐ’ ๋„˜๊ฒจ์ฃผ๊ธฐ

Delete Task

  • Alert ์‚ฌ์šฉ

๋ฌธ์ œ

  • ์‚ญ์ œ Alert๋Š” ๋œจ๋Š”๋ฐ "์ทจ์†Œ"๊ฐ€ ์•ˆ ์ƒ๊ธฐ๊ณ  ์‚ญ์ œ ๋ˆŒ๋Ÿฌ๋„ ์‚ญ์ œ๊ฐ€ ์•ˆ ๋จ.

Edit Task

๋ฌธ์ œ

  • ์ˆ˜์ • ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ๋„ ์ธํ’‹์ด ์‹คํ–‰ ์•ˆ ๋จ

์•Œ๊ฒŒ ๋œ ๊ฒƒ

  • ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์“ธ ๋• props๋กœ ๋„˜๊ฒจ์ค˜์•ผ ํ•œ๋‹ค.
    • ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ๋กœ ํ–ˆ๋˜ ๋™๋ฃŒ๊ฐ€ ์•Œ๋ ค์คŒ.

์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ

์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  StyleSheet ์ด์šฉํ•ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

์•Œ๊ฒŒ ๋œ ๊ฒƒ

  • margin์„ 2๋ฐฉํ–ฅ์”ฉ(์ƒํ•˜, ์ขŒ์šฐ) ์“ฐ๋ ค๋ฉด marginVertical, marginHorizontal์„ ์จ์•ผ ํ•œ๋‹ค.

  • todo๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ todo์˜ ํ˜•์‹์„ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•œ๋‹ค. db์— ์–ด๋–ป๊ฒŒ ๋“ค์–ด๊ฐˆ์ง€, id,category ๋“ฑ์˜ key ๊ฐ’์„ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  • TextInput์— onChangeText={setText} onChageText ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ฐ”๋กœ setText๋ฅผ ๋„ฃ์–ด๋„ ๋œ๋‹ค.

๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ

  • StyleSheet ์ผ๋Š”๋ฐ addTodo๋งŒ ์ž๊พธ ๋ง์ฝ. input์— ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ  ์—”ํ„ฐ ๋ˆ„๋ฅด๋ฉด ์˜ค๋ฅ˜
    undefined is not a function(near'...todos.map...')
    • ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ๋ณด๋‹ˆ input๊ฐ’ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋Š” ๊ณณ์— setText("")๊ฐ€ ์•„๋‹ˆ๋ผ setTodos("")๋ฅผ ํ–ˆ๋‹ค.
    • setText("")๋กœ ์ˆ˜์ •ํ•˜๋‹ˆ addTodo ์ž˜ ๋œ๋‹ค.
  • style component ์—†์ด ๋งŒ๋“œ๋‹ˆ ์•„~~~์ฃผ ์ž˜ ๋๋‹ค..!

Maintain states on Refresh

  • yarn add @react-native-async-storage/async-storage ์„ค์น˜ํ•˜๊ธฐ
    • ์ €์žฅํ•  ์นดํ…Œ๊ณ ๋ฆฌ๋„ ๋งŒ๋“ค๊ณ  useEffect๋กœ ์ €์žฅ, ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋งŒ๋“ค๊ธฐ

๊ณผ์ œ

Firebase ๋ถ™์ด๊ธฐ - Refactoring for Full-Stack

  • firebase

    • ์›น์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ js๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— '์›น'์„ ์„ ํƒํ•ด์•ผ ํ•จ
    • ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ ok
    • ๊ทœ์น™ ์ˆ˜์ •(๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ์—†์ด Firestore๋งŒ ์‚ฌ์šฉ)
    • Firebase SDK ์ถ”๊ฐ€ = npm ์‚ฌ์šฉ
      yarn add firebase
    • ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ๋ชจ๋“  ์ƒํƒœ๊ฐ€ ์œ ์ง€(Async Stroage๋Š” ์ œ๊ฑฐ)
  • ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

    • ํŒŒ์ด์–ด๋ฒ ์ด์Šค ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ณ  ๊ทœ์น™ ์ˆ˜์ •
    • Firebase.js ๋งŒ๋“ค๊ณ  ์—ฐ๊ฒฐ ์ฝ”๋“œ ๋„ฃ๊ณ  git.ignore์— ๋„ฃ์–ด๋‘ 

๐Ÿšฉ

์ƒˆ๋กœ์šด ํŒ€

  • ํŒ€์žฅ!!
    • ๊ธฐ๋ก, ์ •๋ฆฌ, ์ฃผ๋„๋ฅผ ์ข‹์•„ํ•˜๋Š” ๋‚ด ์žฅ์ ์„ ์‚ด๋ ค ํŒ€์žฅํ•˜๊ฒ ๋‹ค๊ณ  ํ•จ! ๋‚˜๋Š” ๋ฆฌ๋” ์ฒด์งˆ์ธ ๊ฒƒ ๊ฐ™๋‹ค!
profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€