inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 영화 사이트 만들기

무비앱 시리즈 #5 Grid Card Component ( 따라하며 배우는 리액트 노드 )

선생님... Movies가 불러지지가 않습니다 ㅠㅠ 어케된걸까요

432

김관김관

작성한 질문수 5

0

import React,{useEffectuseStatefrom 'react'
import { FaCode } from "react-icons/fa";
import {API_URLIMAGE_BASE_URLAPI_KEYfrom '../../Config';
import MainImage from './Sections/MainImage'
import GridCards from '../common/GridCards'
import {Rowfrom 'antd';

function LandingPage() {
    
    const [MoviessetMovies] = useState([]);
    const [MainMovieImagesetMainMovieImage] = useState(null); 
    
    function hookFunction(MoviesMainMovieImage){
        setMainMovieImage(MainMovieImage)
        // setMainMovieImage(response.results[0])
        setMovies([Movies.results])
        console.log(`Movies->   ${Movies}``MainMovieImage->  ${MainMovieImage}`);
    }

    function MoviesCall(){
        Movies.map((movieindex=> {
            console.log(index);
        })
    }

    useEffect(() => {
        const endpoint = `${API_URL}movie/popular?api_key=${API_KEY}&language=en-US&page=1`;
        fetch(endpoint)
        .then(response => response.json())
        .then(response =>{
            hookFunction(response.resultsresponse.results[0])
        }
        )
        return () => {
            console.log("I'm dying...");
        }
    }, [])
    

    return (
        <>
        <div style={{width:'100%'margin:'0'}}>
        
         {/* path오류는 값을 가져오기전 랜더링해버려서 그럼 */}
         {/* MainImage */}
        {MainMovieImage &&
        <MainImage image={`${IMAGE_BASE_URL}w1280${MainMovieImage.backdrop_path}`}
                    title ={MainMovieImage.original_title}
                    text = {MainMovieImage.overview}
                    />
        }
        <div style={{width:'100%'margin:'1rem auto'}}>
            <h2>Movies by latest</h2>
            <hr/>
            {/* GridImage */}
             <Row>
                {Movies && Movies.map(function(movieindex){
                    console.log(`movie->>>${movie}`);
                })} 
            </Row>
            </div>
            <div style={display:'flex'justifyContent:'center' }}>
                <button>
                    Load More
                </button>
            </div>
        </div>
        </>
    )
}

export default LandingPage
useEffect부분에서 호출해서 Movies값이 출력되는 것을
확인했는데요 렌더링부분에서 undefined가뜹니다.
useEffect가didMount뒤에 부른다면 딱히
값이 없어질 타이밍이 없는거같은데 어떻게된걸까요??

react express nodejs 웹앱 mongodb

답변 4

3

코딩왕

저도 위에분과 같은 증상이네요.

useEffect(() => {
        const endpoint = `${API_URL}movie/popular?api_key=${API_KEY}&language=en-US&page=1`
        
        fetch(endpoint)
            .then(res => res.json())
            .then(res => {
                console.log(res);
                setMovies([res.results]) → setMovies(res.results) 로 수정하면 강의대로 진행됩니다.
                setMainMovieImage(res.results[0])
            })
   }, [])

저같은 경우에, 문제 확인 차 여러가지 해본결과   

setMovies([res.results])   로 했을 경우에

{Movies && Movies.map((movieindex=> (
                    <React.Fragment key={index}>
                        <GridCards
                            image={movie.poster_path ?
                                `${IMAGE_BASE}w500${movie.poster_path}` : null }
                            movieId = {movie.id}
                             movieName={movie.original_title}
                        />
                    </React.Fragment>
                ))}

movie에는 Object가 들어있어서, Object안 스탭에 접근을 못해서,  undefined가 된것 같습니다.

{Movies && Movies.map((movieindex=> (
                    <React.Fragment key={index}>
                        <GridCards
                            image={movie[0].poster_path ?
                                `${IMAGE_BASE}w500${movie[0].poster_path}` : null }
                            movieId = {movie[0].id}
                             movieName={movie[0].original_title}
                        />
                    </React.Fragment>
                ))}

위와 같이 movie[0]처럼, index값을 지정해주면, 해당 index정보만 출력이 잘됩니다.

1

김관김관

ㅠㅠㅠ 선생님의 말씀에 힘입어 해결하였습니다.

에러 원인이 두가지 있었습니다.

그런데 선생님 코드에서는 setMovies에서[response.result]로 넣어주셨는데 이중배열이 아니라 그냥 배열로 사용되었는데

어떻게된걸까용??

    function hookFunction(Movies, MainMovieImage){//response.result를 받고 다시 Movies.result호출 <-에러 1
        setMovies([Movies.result])//[Movies]를 넣어주면 이중배열 setMovies(Movies)코드로 수정후 해결 <-에러 2
        setMainMovieImage(MainMovieImage)
        // setMainMovieImage(response.results[0])
        console.log(`Movies->   ${Movies}``MainMovieImage->  ${MainMovieImage}`);
   }

1

김관김관

console.log(`movie->>>${movie}``Movies=>>>>${Movies}`);
결과값 movie->>>undefined Movies=>>>>
console.log(`movie->>>${movie}``Movies=>>>>${Movies != null}`);
결과값 movie->>>undefined Movies=>>>>true
console.log(`movie->>>${movie}``Movies=>>>>${Movies != undefined}`);
결과값 movie->>>undefined Movies=>>>>true
Movies값 자체가 undefined가 나옵니다.
Movies값이 비어있다고생각했는데 undefined였던것같습니다.
첫번째 consol.log에서Movies값이 비어있어서 착각했었네요.

0

John Ahn

 <Row>

                {Movies && Movies.map(function(movie, index){

                    console.log(`movie->>>${movie}`);

                })} 

            </Row>

여기서  movie 값이 undefined인가요 ?  아니면  Movies 자체가 undefined가 나오나요 ~ ?

에러서 요렇게만 해보세요

0

228

1

antd Menu 질문

0

260

1

movieTitle

0

218

1

npm run dev 연결이 안됩니다ㅜㅜ

0

410

1

npm run dev 오류

0

855

1

403 forbidden error

0

1067

2

npm run dev 오류

0

696

1

모듈이 없다는데요

0

1278

1

npm run dev 실행시 오류

0

5372

1

504 Gateway Timeout Error

0

1448

1

컴파일 에러 관련 문의

0

504

1

npm run dev 오류

0

760

1

이미지가 안떠요...

0

369

2

npm run dev 실행하고 인증이 안되는거 같아요

0

531

1

cd client에서 npm install 오류

0

1418

1

npm run dev시 localhost가 자꾸 3000으로 연결됩니다

0

972

1

Netlify + AWS Elastic Beanstalk 를 이용한 배포

1

1785

1

[nodemon] app crashed - waiting for file changes before starting... Error occurred while proxying request localhost:3000/api/hello to http://localhost:5000/ 해결법

0

460

0

지금 듣기엔 안되는 강의일까요?

0

718

1

사진이 2개 2개씩 다른줄에 나와요 ㅠㅠ

0

428

1

비동기 처리가 영상과 다르게 됩니다..

0

247

0

#2강 npm install

0

768

4

LandingPage.js 내 useState(null) 이용하는 이유

0

226

0

client 부분에 App.js 와 Config.js 위치가 다른데 상관없는 것인가요?

0

384

1