inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

비전공자를 위한 진짜 입문 올인원 개발 부트캠프

[재 질문]Cannot read properties of undefined (reading 'map') TypeError: Cannot read properties of undefined (reading 'map') 에러 해결 어떻게 하나요?

88

isbcom1004

작성한 질문수 17

0

현재 [그랩마켓] React로 웹 개발하기 -2 듣고 있는데요,
1.
그랩 선생님 소스 코드와 동일하게 아래 작성한 index.js 소스 첨부하는데요,
실행하면,
1초 동안 잠깐 판매되는 상품들 이미지 없이 전체 페이지 뜨다 바로 아래 첨부한 그림과 같이
에러가 발생
합니다.

grabmarket map error.jpg.webp

이 에러는 어떻게 해결 할 수 있을까요?

--------
2. index.js 소스 아래에 작성 첨부 합니다.

import './index.css';
import axios from "axios";
import React from 'react';

function MainPage(){
    const [products, setProducts]=React.useState([]);
    React.useEffect(
        function(){
            axios.get("이곳에는 제 목 mock 서버 주소를 넣었습니다/products")
            .then(function(result){
                const products=result.data.products;
                setProducts(products);
            }).catch(function(error){
                console.error("에러 발생:",error);
            });
    },[]); return ( 
        <div>    
        <div id="header">
        <div id="header-area">
            <img src="../images/icons/logo.png" />
        </div>
    </div>
    <div id="body">
        <div id="banner">
            <img src="../images/banners/banner1.png" />
        </div>
        <h1>판매되는 상품들</h1>
        <div id="product-list">
            
            {
                 products.map(function(product, index){
            
                    return ( 

                <div className="product-card">
                
                <div>

                <img className="product-img" src={product.imageUrl} />
                </div>
            <div className="product-contents">
                <span className="product-name">{product.name}
                </span>
                <span className="product-price">{product.price}원
                </span>
                <span className="product-seller">
                    <img className="product-avatar" src="../images/icons/avatar.png" />
                    <span>{product.seller}</span>
                </span>
            </div>
            </div>

        ); 
                }) 
            }
        
        </div>
        </div>
    
    <div id="footer"></div>
    </div>
    );
}

export default MainPage;

그리고, 추가적으로 아래 그랩님 답변 본 뒤 다시 시도해 본 후 질문이 있어 추가적으로 글을 적습니다.

현재 postman을 실행하고요, 제 해당 목 mock 서버 주소를 입력 후 끝에 /products까지
하면요, 아래와 첨부한 사진과 같이 잘 데이터를 받아오는 것 같은데요, 위에 에러 화면이 그대로 표시되어 어떻게 해결해야 하는지 방법을 모르겠습니다. 조금 구체적으로 어떻게 해결해야 하는지 단계별로 친절한 설명 부탁드립니다.

grabmarket map error mock server url data okay.jpg.webp

 

grabmarket mock server error default.jpg.webp

 

grabmarket mock server error get products.jpg.webp


HTML/CSS javascript react node.js react-native 머신러닝 express tensorflow

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

isbcom1004님, 현재 발생하는 에러는 products 객체가 정의되지 않을 때 map 함수를 사용하려고 해서 발생하는 문제입니다. 이 문제는 서버에서 데이터를 받을 때 네트워크 지연이나, 데이터 포맷이 예상과 다를 경우에 발생할 수 있습니다. 아래 단계별로 몇 가지 해결 방법을 제안드립니다.

  1. 초기 값 설정: useState의 초기값으로 빈 배열([])을 설정하여 렌더링 중 products가 항상 배열임을 보장해야 합니다. 이는 현재 소스코드에서 이미 구현되어 있습니다.

  2. 데이터 형 체크 및 방어적 처리: API 요청 후 setProducts를 호출하기 전에 데이터를 검사합니다.

    axios.get("https://your-mock-server/products")
    .then(function (result) {
        const products = result.data.products;
        if (Array.isArray(products)) {
            setProducts(products);
        } else {
            console.error("API error: 'products' is not an array.");
        }
    })
    .catch(function (error) {
        console.error("에러 발생:", error);
    });
    
  3. 조건 렌더링: products가 배열인지 확인하여 조건 렌더링을 추가합니다. 배열이 아닐 때 안전하게 렌더링되도록 조치합니다.

    {products && Array.isArray(products) && products.map(function (product, index) {
        // map 코드
    })}
    
  4. 디버깅 및 콘솔 로그: result.data.products가 원하는 형식인지 콘솔 로그를 통해 확인하세요.

    console.log(result.data.products);
    

이를 통해 문제의 원인을 찾고 해결할 수 있을 것입니다. 추가적으로 Postman에서 API 결과가 정상적으로 나오는 것을 확인하셨다면, 네트워크 요청이 프론트 쪽에서 제대로 반영되는지 확인해보세요.

해당 방법으로 문제가 해결되지 않거나 추가적인 질문이 있다면 언제든지 문의해 주세요. 도움이 되셨길 바랍니다.

0

isbcom1004

(AI 인턴님과 그랩님께 부탁 드립니다.)
AI 인턴이 알려준 위 2번,3번,4번 소스 코드를 어느 자리에 각각 붙여 넣어야 하는지,
또는 AI 인턴이 알려준 2번,3번,4번 소스 코드를 제가 첨부한 index.js 소스 어디에 붙여 넣어 최종 완성된 수십 줄의 소스 코드를 아래 답변 댓글에 길더라도 다 첨부해주시면 완성된 소스 코드를 그대로 복사하여 vs code에 붙여 넣기 하고 싶은데요, 빠른 시일 내에
답변 주실 수 있다면 좋겠습니다.

[해결]그랩님 답변 주세요.

0

159

2

그랩님의 답변을 기다립니다/102강 전반적인 에러

0

139

2

[그랩님께]101강 안드로이드 에러들(Key prop)해결방법 궁금합니다.

0

122

2

[재질문][그랩님 답변 부탁드립니다]101강

0

135

2

[그랩님 답변 부탁드립니다]101강 Axios 에러와 502 Bad Gateway 질문

0

96

2

Ngrok 설치 후 forwarding Url 에러

0

129

2

[그랩님께,Ngrok 악성코드 인식 해결방법]질문 드립니다.

0

213

2

Ngrok 설치 후 forwarding Url로 연결 불가

0

133

1

그랩님,[꼭] 답변 부탁드립니다.

0

64

1

[꼭][[꼭] 그랩님, 답변 부탁드립니다], Failed to load resource: the server responded with a status of 404 (Not Found) 상품 상세 페이지 질문입니다.

0

145

1

6강/7강 수업

0

49

1

그랩님, 상품 상세 페이지 에러와 의문점 질문드립니다.

0

98

2

그랩님, 해결되지 않은 에러 메시지 [꼭] 답변 부탁 드립니다.

0

133

2

Cannot read properties of undefined (reading 'map') TypeError: Cannot read properties of undefined (reading 'map') 에러 해결 어떻게 하나요?

0

126

2

일반적인 css 꾸미기에서 width와 height의 값?

0

86

2

Windows에서의 업로드 후 홈화면 상품이미지 오류 해결방법

0

191

1

그랩마켓 웹화면 구현하기 -2 질문입니다.

0

118

1

react에 반영이 되지 않습니다.

0

233

1

터미널 npm install -g create-react-app 작성 후 오류

0

418

1

create-react-app my app 실행 시 에러

0

349

2

포스트맨 질문

0

93

1

<꼭 답변 부탁 드립니다>그랩선생님, [컴포넌트 사용하기] 강의에서 질문 있습니다.

0

255

2

그랩선생님, 질문 답변 부탁 드립니다.vscode에서 npm install -g create-react-app 입력 후 에러 입니다.

0

468

2

git username 과 gutHub의 이름이 동일해야 하나요?

0

433

1