Frontend ๊ฐœ๋ฐœ์ž - hyo.loui

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ - CRUD: Update API (updateDoc( ) ํ™œ์šฉํ•˜๊ธฐ) ๋ณธ๋ฌธ

React-Navtive

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ - CRUD: Update API (updateDoc( ) ํ™œ์šฉํ•˜๊ธฐ)

hyo.loui 2023. 1. 3. 15:39

๐ŸŽฏ๋ชฉ์  :

CRUD : Update API ์ƒ์„ฑ , Firebase : FireStore data ์—…๋ฐ์ดํŠธ

 

๐Ÿคข ์˜ค๋ฅ˜ ํ•ด๊ฒฐ :

  •  WARN  Possible Unhandled Promise Rejection :
    TypeError: _n7.indexOf is not a function. 

1. setDone (์ฒดํฌ์•„์ด์ฝ˜)

์ฒดํฌ ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ํ•ด๋‹นํ•˜๋Š” todo์˜ isDone ์†์„ฑ์„ ํ† ๊ธ€๋กœ ๋ณ€๊ฒฝํ•˜๊ณ ,

isDone์ด true ๋ผ๋ฉด ์™„๋ฃŒํ–ˆ๋‹ค๋Š” ํšจ๊ณผ(text-decoration: line-through)๋ฅผ ์ฃผ์ž

์•„์ด์ฝ˜ ํด๋ฆญ ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๊ณ ,

์„œ๋ฒ„ํ†ต์‹ ์„ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ˆ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์คฌ๋‹ค.

๋˜ ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” todos์˜ isDone์„ ํ† ๊ธ€ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

find ๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์ง€๊ธˆ ๊ฐ€์ง„ isDone๊ณผ ๋ฐ˜๋Œ€๋กœ ๊ณ„์† ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค

์Šคํƒ€์ผ์€ ์ด๋ ‡๊ฒŒ 3ํ•ญ ์—ฐ์‚ฐ์ž๋กœ isDone์ด true๋ผ๋ฉด ์‚ญ์„ ์„ ๊ธ‹๊ณ ,

false ๋ผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค

 

ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ๊ณผ์ •์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค

์•„๋ž˜ ํ•ด๊ฒฐ๊ณผ์ •์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์ž!

 


update์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ธ ๋ฐ์ดํ„ฐ์˜ text๋ฅผ update ํ•ด ๋ณด์ž

์šฐ์„  ๊ธฐ๋Šฅ์„ 2๊ฐœ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค

  • ์ˆ˜์ • ์•„์ด์ฝ˜ ํด๋ฆญ์‹œ setEdit( ) , Text ํƒœ๊ทธ๋ฅผ textInput ํƒœ๊ทธ๋กœ ๋ณ€๊ฒฝ
  • textInput์—์„œ ์—”ํ„ฐ(onSubmitEditing)๋˜๋ฉด updateDoc()

2-1. setEdit

์•„์ด์ฝ˜ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค

์ด๊ฒƒ๋„ ์—ญ์‹œ ์„œ๋ฒ„ํ†ต์‹ ์œผ๋กœ updateDoc()์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๊ณ ,

์œ„์—์žˆ๋Š” setDone ํ•จ์ˆ˜์™€ ๋˜‘๊ฐ™๋‹ค

์ด ํ›„ todo์˜ isEdit ์ƒํƒœ์— ๋”ฐ๋ผ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ

textInput์ด ๋ ๊ฒƒ์ธ์ง€, text๊ฐ€ ๋ ๊ฒƒ์ธ์ง€ ๋‚˜๋ˆ„์—ˆ๋‹ค

 

2-2. onSubmitEditing

์œ„์— ๋งŒ๋“ค์–ด์ค€ <TextInput/> ํƒœ๊ทธ์—์„œ

์‚ฌ์šฉํ•  ์Šคํ…Œ์ดํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค

  1. ์œ„ ์Šคํ…Œ์ดํŠธ์—์„œ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ onChangeTextํ•˜์—ฌ ๊ณ„์† ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•ด setState
  2. ์—”ํ„ฐ, ์ฆ‰ submit์ด ๋˜๋ฉด ์‹คํ–‰์‹œํ‚ฌ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ todo์˜ id๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค

 

update API ์˜์—ญ์— submit์ด ๋˜๋ฉด ์‹คํ–‰ ๋  ํ•จ์ˆ˜๋„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค

๋กœ์ง์€ ์œ„์—์„œ ํ–ˆ๋˜ update์™€ ๊ฐ™๋‹ค

๋‹ค๋ฉด id๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” text๋ฅผ ๋ฐฉ๊ธˆ ์ „ ๋งŒ๋“ค์–ด์ค€ editText๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ ,

์—ด๋ ค์žˆ๋Š” TextInput์„ ๋‹ซ์•„์ฃผ๊ธฐ ์œ„ํ•ด false๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๋ฉด ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋œ๋‹ค!

 


3. ๊ฒฐ๊ณผ ํ™”๋ฉด


 

+ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ :

ํŒŒ์ด์–ด๋ฒ ์ด์Šค updateDoc, getDoc, onSnapShot API ์ค‘ ์—๋Ÿฌ

 

WARN  Possible Unhandled Promise Rejection

check ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด todo์˜ isDone์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค

์ž˜ ์ฝ์–ด๋ณด๋‹ˆ index error ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ

๊ทธ ์ „์—๋Š” id๋ฅผ ์†์„ฑ์œผ๋กœ ๋„ฃ์–ด์คฌ๋Š”๋ฐ,

 

firebase์—์„œ ์ž๋™์ ์œผ๋กœ id๊ฐ€ ์ƒ์„ฑ์ด ๋˜๋ฏ€๋กœ

์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์ถ”๊ฐ€ ํ•  ํ•„์š”๋Š” ์—†์–ด์„œ

 

NewTodo ์—์„œ ์ง€์›Œ์คฌ๋˜๊ฒŒ ์ƒ๊ฐ์ด ๋‚ฌ๋‹ค

 

์ถ”๋ก :

edit ์€ ๋˜์—ˆ์ง€๋งŒ db๋ฅผ ์ฝ์–ด์˜ฌ ๋•Œ์˜ index ๋‚ด์šฉ์ด ์„œ๋กœ ๋‹ค๋ฅด๋‹ค!

 

ํ•ด๊ฒฐ:

์šฐ์„  ๋™๋ฃŒ๋“ค์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด ์˜คํƒ€์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์•˜๊ณ ,
๋‚˜๋Š” FireStore์— ์žˆ๋Š” ์ปฌ๋ ‰์…˜ ๋ชจ๋‘ ์‚ญ์ œ๋ฅผ ํ–ˆ๋‹ค

 

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค

๋Š๋‚€์ ์€, ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ  ์—๋Ÿฌ๋ฅผ ์ž˜ ์ฝ์–ด๋ณด๋ฉด ํžŒํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์žˆ๋‹ค!


 

 ์ตœ์ข… ์ •๋ฆฌ 

  1. findIndex : ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋กœ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์˜ค๋Š”๋ฐ ์•„์ฃผ ๊ฐ„ํŽธํ•œ ๋ฉ”์„œ๋“œ
  2. RN ์—์„œ๋Š” onSubmit >> onSubmitEditing ์œผ๋กœ ์‚ฌ์šฉ
  3. firebase ์‚ฌ์šฉ์‹œ updateDoc( ) ํ•จ์ˆ˜๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค
  4. state๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ Text, TextInput์„ ๋ณด์—ฌ์ฃผ๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ
    ํ† ๊ธ€ ์‹œ ๋ Œ๋”๋ง๋จ๊ณผ ๋™์‹œ์— UI๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค
  5. firebase ์‚ฌ์šฉ ์‹œ index is not a function ์—๋Ÿฌ๋Š”
    ์˜คํƒ€, ๋ฐ์ดํ„ฐ๊ฐ„ key ํ†ต์ผ์ด ์•ˆ๋œ ๊ฒฝ์šฐ์ด๊ฑฐ๋‚˜ type์ด ๋งž์ง€ ์•Š์•„์„œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜์ด๋‹ค