SangYoonLee (SYL)
โ—† Slow, But Steady โ—†
SangYoonLee (SYL)
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • โ—ป ์ „์ฒด ๊ธ€ ์ˆ˜ : (128)
    • โœช ์ทจ๋ฏธ, ๊ฒฝํ—˜ ํšŒ๊ณ  ๋ฐ ์ผ์ƒ (25)
      • [์ทจ๋ฏธ] Room Escape (2)
      • [ํšŒ๊ณ ] IT ๊ด€๋ จ ๊ฒฝํ—˜ ํšŒ๊ณ  (17)
      • [์ผ์ƒ] ์ผ์ƒ ์ƒ๊ฐ (4)
      • [์ผ์ƒ] ๋…ํ›„๊ฐ (1)
    • โ—ผ FrontEnd (27)
      • Web & HTML, CSS (8)
      • JavaScript (2)
      • TypeScript (1)
      • ReactJS (16)
    • โ—ผ CS (3)
      • ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1)
      • ์ปดํ“จํ„ฐ ๊ตฌ์กฐ (1)
      • ์šด์˜์ฒด์ œ (1)
    • โ—ผ PS Note (40)
      • ๋ฐฑ์ค€ (38)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (2)
    • โ—ผ IT Etc. (33)
      • (Until 2021) (21)
      • Python (6)
      • C | C# | C++ (1)
      • Git (1)
      • Unity (4)
      • Game Dev. (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๐Ÿ’ป GitHub
  • ๐ŸŸข Velog
  • ๐Ÿงฉ ์˜จ๋ผ์ธ ๋ฐฉํƒˆ์ถœ ์ถœ์‹œ ์ž‘ํ’ˆ ๋ชจ์Œ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

๊ณต์ง€์‚ฌํ•ญ

๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
SangYoonLee (SYL)

โ—† Slow, But Steady โ—†

โ—ผ FrontEnd/ReactJS

[ReactJS] ๋ฐฑ์—์„œ GET method๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹นํ•  ๋•Œ ๊ฐ’์ด ์ฝํ˜€์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ - Uncaught TypeError: Cannot read properties of undefined (reading '0')

2022. 12. 9. 12:35
๋ฐ˜์‘ํ˜•

๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ

ํŒ€ ํ”„๋กœ์ ํŠธ ์ค‘ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์—ฌ ๋ฐ›์€ ํ›„, ์ด ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•ด์„œ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•ด์ฃผ๋Š” ์ž‘์—…์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์žˆ์—ˆ๋‹ค. ์ด ๋•Œ ์ž์ฃผ ๊ณจ์น˜๋ฅผ ์•„ํ”„๊ฒŒ ํ–ˆ๋˜ ์—๋Ÿฌ๊ฐ€ ํ•˜๋‚˜ ์žˆ์–ด ํฌ์ŠคํŠธ๋กœ ๋‚จ๊ธด๋‹ค.

 

const ReservationPage = () => {
  const [lectureData, setLectureData] = useState({});

  // ๋ฐฑ์—์„œ ์ƒํ’ˆ ๋””ํ…Œ์ผ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 
  useEffect(() => {
    fetch(`/data/reservationData.json`, {
      method: 'GET',
    })
      .then(response => response.json())
      .then(data => {
        setLectureData(data);
      });
  }, []);

  if (lectureData === {}) {
    return null;
  }

  ...
}

 

์šฐ์„ , fetch ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ๋กœ๋ถ€ํ„ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•˜๋‹ค.

 

{
  "data": [
    {
      "images": "aimage",
      "lectureDate": [
        {
          "isReserved": 0,
          "lectureDate": "2022, 12, 23",
          "lectureTimeOptionId": 1
        }
      ],
      "lectureId": 1,
      "lectureText": "์œ„์А๋žญ ์Šคํƒ€ ์…ฐํ”„ ๊น€ํ˜ธ์ค€์˜ ๋น„๋ฐ€ ๋ ˆ์‹œํ”ผ ํ›”์ณ์˜ค๊ธฐ",
      "lectureTitle": "์œ„์А๋žญ 3์Šคํƒ€ ์‰ํ”„ ๊น€ํ˜ธ์ค€์˜ ๋น„๋ฐ€ ๋ ˆ์‹œํ”ผ",
      "lecturerName": "Georgeta",
      "price": "70000"
    }
  ]
}

 

์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์ด์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

 

  // ๋ฐฑ์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
  const data = lectureData.data;
 
  const { lectureId, lectureTitle, lectureText, lecturerName, price, images } =
    data[0];

 

ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

Uncaught TypeError: Cannot read properties of undefined (reading '0')

undefined์ธ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

 


๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๊ณผ์ •

์ด์œ ๋Š” ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜, ๋ฐฑ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹นํ•  ๋•Œ, ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ index ๊ฐ’์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๊ฐ’์ด ์ฝํ˜€์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ํ•œ๋‹ค.

const { lectureId, lectureTitle, lectureText, lecturerName, price, images } = data[0];

 

๋”ฐ๋ผ์„œ ๋ฐฑ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์‹œ, ๋ฐฐ์—ด์˜ index๋กœ ์ ‘๊ทผํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฑ์—์„œ ๋งŒ๋“  ๋ฐ์ดํ„ฐ์— ๋ฐฐ์—ด ๊ตฌ์กฐ๊ฐ€ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ์ƒํ™ฉ์€ ์ž์ฃผ ์žˆ๋‹ค. ์ด๋Ÿด ๋• ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”๊ฐ€?

 

๋งŒ์ผ ๋ฐ์ดํ„ฐ์— ๊ผญ index๋กœ ์ ‘๊ทผํ•ด์•ผ๋งŒ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด setState์˜ Modifier ํ•จ์ˆ˜ ์ธ์ž ๋‚ด๋ถ€์—์„œ (index๋กœ) ์ ‘๊ทผํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

const ReservationPage = () => {
    const [lectureData, setLectureData] = useState([]);
    const [reservation, setReservation] = useState('');
    const { lectureId } = useParams();

    // ๋ฐฑ์—์„œ ์ƒํ’ˆ ๋””ํ…Œ์ผ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 
    useEffect(() => {
      fetch(`http://10.58.52.141:3000/lectures/${lectureId}/reservations`, {
        method: 'GET',
      })
        .then(response => response.json())
        .then(data => {
          // ์ด ๊ณณ์—์„œ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ OK
          setLectureData(data.data[0]);
        });
    }, []);

    // ๋ฐฑ์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
    const { lectureId, lectureTitle, lectureText, lecturerName, price, images } =
      lectureData;
      
    ...
  }

 


๐Ÿ’ฌ ๋А๋‚€ ์ 

๋…ผ๋ฆฌ์ ์ธ ์ ˆ์ฐจ๋Œ€๋กœ๋ผ๋ฉด ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ์—†์ด ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•  ํ…๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์•„์„œ ์ฐธ์œผ๋กœ ๋‹ต๋‹ตํ–ˆ๋˜ ์—๋Ÿฌ์˜€๋‹ค. ๋ฉ˜ํ† ๋‹˜๋„ ์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ๋ชจ๋ฅด์…จ๊ณ  ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ด๋„ ์›ํ•˜๋Š” ๋‹ต์„ ์–ป์„ ์ˆ˜ ์—†์–ด์„œ ์ฐธ์œผ๋กœ ์•„์‰ฌ์› ๋‹ค.

 

๋ฐ˜์‘ํ˜•

'โ—ผ FrontEnd > ReactJS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ReactJS] React JS ์†Œ๊ฐœ ๋ฐ ์„ค์น˜  (0) 2023.01.22
[ReactJS] ๊ฐœ๋ฐœ ๋„์ค‘ ๋งˆ์ฃผํ–ˆ๋˜ ์˜ค๋ฅ˜ ๋ชจ์Œ (2022๋…„ 11-12์›”)  (0) 2023.01.20
[ReactJS] setState์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•œ ๋ฒ„๊ทธ ํ•ด๊ฒฐํ•˜๊ธฐ  (0) 2022.11.04
[ReactJS] React์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , event ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์   (0) 2022.11.04
[ReactJS] React๋กœ ์š”์†Œ์— ํด๋ž˜์Šค ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๊ธฐ (๋ถ€์ œ : React์—์„œ ์ง์ ‘ DOM์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์ž)  (0) 2022.11.04
    'โ—ผ FrontEnd/ReactJS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ReactJS] React JS ์†Œ๊ฐœ ๋ฐ ์„ค์น˜
    • [ReactJS] ๊ฐœ๋ฐœ ๋„์ค‘ ๋งˆ์ฃผํ–ˆ๋˜ ์˜ค๋ฅ˜ ๋ชจ์Œ (2022๋…„ 11-12์›”)
    • [ReactJS] setState์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•œ ๋ฒ„๊ทธ ํ•ด๊ฒฐํ•˜๊ธฐ
    • [ReactJS] React์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , event ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 
    SangYoonLee (SYL)
    SangYoonLee (SYL)
    Slow, But Steady Wins The Race ๐Ÿ˜Ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”