๐ŸฅธReview/๊ฐ•์˜ ๋ฆฌ๋ทฐ

์ฝ”๋ฉ˜ํ†  ์‹ค๋ฌดPT ํ›„๊ธฐ ์ฑŒ๋ฆฐ์ง€_๋ฆฌ์•กํŠธ ๊ฐ•์˜ 4์ฃผ์ฐจ ํ›„๊ธฐ

hellohailie 2023. 2. 10. 23:10

โœ”๏ธ 3์ฃผ์ฐจ ๊ณผ์ œ์—์„œ ํ”ผ๋“œ๋ฐฑ ๋ฐ›์€ ๋‚ด์šฉ๊ณผ ๋ฐฐ์šด ๋‚ด์šฉ

โ–  ์ฒ˜์Œ ๋žœ๋”๋ง์ด ๋˜๊ณ ๋‚˜์„œ ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋Š ๋ฐ์ดํ„ฐ์ธ์ง€ ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•ด์•ผํ•œ๋‹ค. 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• => ์„œ๋ฒ„์— ๋ณด๋‚ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ index 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ ์—ญ์‹œ index 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค. 

โ–  ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ค‘์— [object Object]๋กœ ๋‚˜ํƒ€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ ๋ฌธ์ œ๊ฐ€ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๋นˆ ๊ฐ์ฒด๋กœ ์„ค์ •ํ•ด์„œ ๋‚˜์˜จ ๋ฌธ์ œ์˜€๋‹ค. (์‹ค์ œ๋กœ๋Š” '๋ฌธ์ž์—ด'์ž„) ๋งŒ์•ฝ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ๊ฐ์ฒด ํ˜•ํƒœ๋ผ๋ฉด JSON.stringfy๋กœ ๋ฌถ์–ด์ฃผ๋ฉด ๋œ๋‹ค. 

โ–  input ํƒœ๊ทธ์—์„œ value์™€ defaultValue์˜ ์ฐจ์ด

์—ญํ• ์€ ๊ฐ™๋‹ค. 

value๋Š” ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ. value๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด readOnly ์†์„ฑ์„ true๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค. 

defaultValue๋Š” ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ ์‚ฌ์šฉ

 

โ–  ๋ฌธ์žฅ ๋ถ„์„ ๋ถ€๋ถ„์—์„œ ํšŒ์‚ฌ๋ช…์— ๋”ฐ๋ผ ๋ฐ”ํƒ•์ƒ‰์„ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค. 

๋ฐฐ๊ฒฝ์ƒ‰์„ ์„ค์ •ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. 

 

์ „์ฒด ํšŒ์‚ฌ๋ช… ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์ฐพ๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋ฅผ indexOf๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ์ƒ‰ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

์—ฌ๊ธฐ์„œ ๊นŒ๋‹ค๋กœ์› ๋˜ ์ ์ด ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ์—์„œ ์ „์ฒด ํšŒ์‚ฌ๋ช… ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๋ ค๋‚ด๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด ์•ˆ์˜ ๋ฐฐ์—ด์ด (์ด์ค‘ ๋ฐฐ์—ด) ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ํ˜•ํƒœ์˜€๋‹ค. 

 

Todo 1..

๋ฐฐ์—ด arr์—์„œ ๋ชจ๋“  name์„ ์ค‘๋ณต์—†์ด ๊ตฌํ•˜๋Š”๋ฐ, score์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌํ•˜๊ธฐ

const arr= [
	[{name:'C', score:10},{name:'B', score:30}],
	[{name:'A', score:90},{name:'E', score:70}],
	[{name:'D', score:70},{name:'A', score:90}],
	[{name:'E', score:30},{name:'F', score:60}],
	[{name:'D', score:90},{name:'C', score:20}]
]

๋‚ด๊ฐ€ ํ‘ผ ๋ฐฉ๋ฒ•
arr.flat().sort((a,b) => b.score - a.score).map(data => data.name).reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], [])

ํ•˜๋‚˜์”ฉ ํ†บ์•„๋ณด๊ธฐ
1. console.log(arr.flat()) 
// ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค. ex) [{},{},{},{},,,]
// [{name: 'C', score: 10}, {name: 'B', score: 30}, {name: 'A', score: 90}, {name: 'E', score: 70}, {name: 'D', score: 70}, ...]

2. console.log(arr.flat().sort((a,b) => b.score - a.score).map(data => data.name))
// score์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ name์„ ์ถœ๋ ฅํ•œ๋‹ค. 
// ['A', 'A', 'D', 'E', 'D', 'F', 'B', 'E', 'C', 'C']

3. console.log(arr.flat().sort((a,b) => b.score - a.score).map(data => data.name).reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []))
// ์ค‘๋ณต์„ ์—†์•ค๋‹ค. 
// ['A', 'D', 'E', 'F', 'B', 'C']

 

 

Todo 2..

์ „์ฒด ํšŒ์‚ฌ๋ช… ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์ฐพ๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋ฅผ indexOf๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ์ƒ‰ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 const setBackGroundColorFn = (stockName) => {
    const BackGroundColor = [
      "rgba(101, 119, 152, 0.15)",
      "rgba(98, 218, 171, 0.15)",
      "rgba(99, 149, 249, 0.15)",
      "rgba(327, 120, 345, 0.15)",
      "rgba(49, 320, 45, 0.15)",
    ];
    if (stockName === undefined) {
      return "rgb(245, 245, 245)";
    }
    const index = stockList.indexOf(stockName.stock);

    return BackGroundColor[index];
  };
  
  setBackGroundColorFn๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ํšŒ์‚ฌ๋ช…์— ๋”ฐ๋ผ ํ•ญ์ƒ ๊ฐ™์€ ์ƒ‰์ƒ์ด ๋ฆฌํ„ด๋˜๋„๋ก ํ•˜์˜€๋‹ค. 
  setBackGroundColorFn์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ๋ฐ์ดํ„ฐ์˜ ํšŒ์‚ฌ๋ช…์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.
  (์—ฌ๊ธฐ์„œ stockList๋Š” ์œ„์—์„œ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋˜ ์ „์ฒด ํšŒ์‚ฌ๋ช…์ž„. )

โœ”๏ธ 4์ฃผ์ฐจ ์‹ค๋ฌด PT ์ฃผ์ œ

๋ฐฑ์—”๋“œ์™€ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ํ”„๋ก ํŠธ์—”๋“œ ์‹ฌํ™”

 

 

โœ”๏ธ ์ด๋ฒˆ ์ฃผ ์ˆ˜์—…์„ ํ†ตํ•ด์„œ ๋ฐฐ์šด ์ 

โ–  CORS ์ •์ฑ… (cross origin resource sharing)

(์—ฌ๊ธฐ์„œ origin์€ ํ”„๋กœํ† ์ฝœ, ๋„๋ฉ”์ธ, ํฌํŠธ๋ฅผ ํฌํ•จํ•œ ๊ฐœ๋…์ด๋‹ค.)

 

CORS = ์„œ๋กœ ๋‹ค๋ฅธ origin ๊ฐ„์˜ ๋ฆฌ์†Œ์Šค ๊ตํ™˜

SOP(Same-Origin Policy)์ •์ฑ… (๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…) = ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ฐ™์€ origin์˜ ์„œ๋ฒ„๋กœ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋„๋ก ์ƒํ˜ธ์ž‘์šฉ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๋ฐฉ์‹

CORS ์ •์ฑ… = ํ˜ธ์ถœ์ด ํ—ˆ์šฉ๋œ ์ถœ์ฒ˜๋ฅผ ์„œ๋ฒ„๊ฐ€ ๋ช…์‹œํ•ด๋†“์œผ๋ฉด, ๋น„๋ก ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•œ ์ •์ฑ…

→CORS ERROR๋Š” CORS ์ •์ฑ…์„ ์ง€ํ‚ค์ง€ ์•Š์•˜์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์ด๋‹ค. 

 

๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์˜ Origin ํ—ค๋”์— ๋‹ด๊ธด ์ถœ์ฒ˜ ์ •๋ณด๊ฐ€ ์‘๋‹ต์˜ Access-Control-Allow-Origin ํ—ค๋”์— ๋‹ด๊ฒจ์žˆ์œผ๋ฉด
ํ•ด๋‹น ์š”์ฒญ์„ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๊ณ  ์‘๋‹ต์„ ๊ฐ€์ ธ์˜จ๋‹ค
.
๋งŒ์•ฝ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์‘๋‹ต์„ ์ž„์˜๋กœ ํŒŒ๊ธฐํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์‘๋‹ต์˜ ๋‚ด์šฉ์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

-> ์„œ๋ฒ„์—์„œ ํ—ˆ์šฉํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฟœ๋Š” ๊ฒƒ์ด๋‹ค!!

CORS ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฒ•

(cors ์—๋Ÿฌ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ํ•ด์ฃผ๋Š”๊ฒŒ ์ด์ƒ์ ์ด๊ธด ํ•˜๋‹ค๊ณ  ๋ง์”€ํ•˜์‹ฌ )

 

1. Access-Control-Allow-Origin ์ „์ฒด ํ—ˆ์šฉ (CORS ์ •์ฑ…์˜ ๋ณธ์งˆ์„ ํ๋ฆฐ๋‹ค)

๋ฐฑ์—”๋“œ์—์„œ ๋ชจ๋“  ์ฃผ์†Œ๋ฅผ Access-Control-Allow-Origin : * ๋กœ ์„ค์ •
์ด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ CORS ๋ฐฉ์–ด๋ฅผ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ์•ˆ์ „ ์žฅ์น˜๋„ ๋‚ ๋ ค๋ฒ„๋ฆฐ ์…ˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค.

 

2. ํ”„๋ก์‹œ ์„œ๋ฒ„ ์‚ฌ์šฉ
CORS์—๋Ÿฌ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋งŒ๋“œ๋Š” ์—๋Ÿฌ๋กœ, ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ์‹œ์—๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑ ํ•˜์—ฌ, ์„œ๋ฒ„๋ผ๋ฆฌ ์†Œํ†ตํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค๋ฉด CORS ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์šฉ์„œ๋ฒ„ → (
https://cors-anywhere/herokuapp.com/ + '์šฐ๋ฆฌ๊ฐ€ ๋ณด๋‚ธ API์š”์ฒญ ์ฃผ์†Œ')

๋‹จ, ๋ฐฐํฌํ•  ๋•Œ๋Š” ์“ฐ์ง€ ๋ชปํ•จ

 

์‹ค๋ฌด์—์„œ๋Š” ํšŒ์‚ฌ์—์„œ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์„œ CORS ์—๋Ÿฌ๋ฅผ ์ œ์–ดํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•จ.

 

3. Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ด์šฉ (๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•)
Chrome์—์„œ๋Š” CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.
๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ API ํ…Œ์ŠคํŠธ ์‹œ, CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๊ณ ๋ฏผํ•˜์ง€ ์•Š๊ณ  CORS๋ฅผ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.


โ–  ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋Š” ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฐฉ๋ฒ•

 

1. ~~ is not a function

์›์ธ : ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ์ฆ‰ ํ•จ์ˆ˜ ๋‚ด์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐœ์ƒํ•œ๋‹ค. 
ํ•ด๊ฒฐ : ํ•จ์ˆ˜๋ช…์„ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜ ๋‚ด์—์„œ ์–ด๋””์„œ ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋Š”์ง€ console.log๋กœ ์ถœ๋ ฅํ•ด๋ณด๋ฉฐ ํ™•์ธํ•˜๋Š” ์ˆ˜ ๋ฐ–์—!! 

์›์ธ์€ ์ฝ”๋“œ์™€ ์ƒํ™ฉ๋งˆ๋‹ค ๋‹ค์–‘ํ•˜์ง€๋งŒ, ํ˜„์žฌ ์ด๋ฏธ์ง€๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์›์ธ์€ movie๊ฐ€ ๊ฐ์ฒด์—ฌ์„œ mapํ•จ์ˆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

 


 2. Undefined error

์›์ธ: ๋ฆฌ์•กํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋ ค์ฃผ๊ณ  ์‹ถ์€ UI๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ  ๋งŒ์•ฝ UI๋ฅผ ๊ทธ๋ฆด ๋‹น์‹œ์— ๋ณด์—ฌ์ฃผ๊ณ ์žํ•˜๋Š” ๊ฐ’์ด ์—†๋‹ค๋ฉด ์—๋Ÿฌ -> ๋žœ๋”๋ง๋˜๋Š” ์‹œ์ ์—๋Š” undefined์—ฌ์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ

ํ•ด๊ฒฐ:
1) State์˜ ์ดˆ๊ธฐ๊ฐ’์—์„œ ๋“ค์–ด์˜ฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ๋„ฃ์–ด๋‘๊ธฐ (ํƒ€์ž… ์ž˜ ํ™•์ธํ•˜๊ธฐโญ๏ธ)
2) ์กฐ๊ฑด๋ถ€๋ Œ๋”๋ง && ์—ฐ์‚ฐ์ž์™€ ์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ, ์กฐ๊ฑด์ผ๋•Œ ๋ Œ๋”๋ง ๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ• ์‚ฌ์šฉํ•˜๊ธฐ

 

์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ์˜ˆ์‹œ

{
	Object.keys(result).length && result.sentence.map((sentence, idx) => {
    	
    	return (
        	<div key={idx} className="sentenceReport2" style={{backgroundColor: setColor(!!sent.condition.length ? sent.condition[0].stock : '์—†์Œ', 0.1)}}>
            	<p className="sentence">{sent.sentence}</p>
                <p className="percent" >
                	<span> {!!sent.condition.length ? sent.condition[0].stock : '์—†์Œ'}&nbsp;&nbsp;&nbsp;</span>
                    <span style={{color: setColor(!!sent.condition.length ? sent.condition[0].stock : '์—†์Œ', 1), fontWeight: 'bold', opacity: "1"}}>{!!sent.condition.length ? Math.floor(sent.condition[0].score*100) : 0}%</span>
                </p>
            </div>
        )
    })
}

 

result.sentence๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด์„œ ์•ž์— 'Object.keys(result).length &&' ๋ฅผ ํ†ตํ•ด์„œ ์•ˆ์ „์žฅ์น˜๋ฅผ ๋งŒ๋“ ๊ฑฐ๋‹ค. 

์ฐธ๊ณ ๋กœ result์˜ ์ดˆ๊ธฐ๊ฐ’์ด ๋นˆ๊ฐ์ฒด์ด๋‹ค.
๊ทธ๋ž˜์„œ Object.keys(result)๋Š” [] ๋นˆ ๋ฐฐ์—ด์ด ๋‚˜์˜ค๊ณ , ๋นˆ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” 0์€ falsy๋‹ˆ๊นŒ ์ด๋•Œ๋Š” ์‹คํ–‰์ด ์•ˆ๋˜๊ณ , ๋ญ๋ผ๋„ ๊ฐ’์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์„๋•Œ ์‹คํ–‰์ด ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

๋ณดํ†ต ๋ฐ์ดํ„ฐ๋Š” JSON ํ˜•ํƒœ๋กœ ๋งŽ์ด ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— 'Object.keys(result).length &&' ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์“ฐ์ธ๋‹ค๊ณ  ํ•œ๋‹ค. 

 


3. Key error

์›์ธ :mapํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒœ๊ทธ๋ฅผ ๋ฐ˜๋ณตํ•  ๋•Œ key์†์„ฑ์ด ์—†์–ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ์ฝ˜์†” ์—๋Ÿฌ์ด๋‹ค. 
-> ๊ฐ ๊ณ ์œ  ์›์†Œ์— key ๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ๋ฐฐ์—ด์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

ํ•ด๊ฒฐ : ๊ฐ€์žฅ ์ƒ์œ„ ํƒœ๊ทธ์— key={์œ ์ผํ•œ ๊ฐ’}์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค. 

 


โœ”๏ธ ์‹ ๊ฒฝ์“ฐ๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ 

๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฐ์ดํ„ฐ๊ฐ€ undefined์ผ ๋•Œ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ๋ คํ•˜๊ธฐ

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ธฐ

 

 


https://bit.ly/3D9XCOz

 

์„ฑ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ํ˜„์ง์ž์˜ ์‹ค๋ฌด ๋…ธํ•˜์šฐ ใ…ฃ ์ฝ”๋ฉ˜ํ† 

๋‚ด ์‹ค๋ฌด์— ์ ์šฉํ•˜๋ฉฐ ์„ฑ๊ณผ๋‚ด๋Š”, ์ง„์งœ ์‹ค๋ฌด ํผ์Šค๋„ ํŠธ๋ ˆ์ด๋‹!

comento.kr