작성
·
38
0
강의대로 따라갔는데 강의처럼 렌더링이 되고 있지 않습니다 ㅠㅠ 어디가 문제일까요
chatgpt는 서버가 없다 뭐 이렇다는데 ㅠㅠ
출력 화면
Nav.js
import React, { useEffect, useState } from 'react'
import"./Nav.css"
export default function Nav() {
const [show, setShow] = useState(false);
useEffect(() => {
window.addEventListener("scroll", ()=> {
console.log('window.scrollY', window.scrollY);
if(window.scrollY > 50) {
setShow(true);
} else {
setShow(false);
}
})
return () => {
window.removeEventListener("scroll", ()=> {});
};
}, []);
return (
<nav className={`nav ${show && "nav__black"}`}>
<img
alt = 'Netflix logo'
src = "https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Netflix_2015_logo.svg/960px-Netflix_2015_logo.svg.png" decoding="async" width="799" height="216" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/08/Netflix_2015_logo.svg/1198px-Netflix_2015_logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/08/Netflix_2015_logo.svg/1597px-Netflix_2015_logo.svg.png"
className='nav__logo'
onClick={() => window.location.reload()}
/>
<img
alt = "User logged"
src = "https://occ-0-3077-988.1.nflxso.net/dnm/api/v6/vN7bi_My87NPKvsBoib006Llxzg/AAAABTZ2zlLdBVC05fsd2YQAR43J6vB1NAUBOOrxt7oaFATxMhtdzlNZ846H3D8TZzooe2-FT853YVYs8p001KVFYopWi4D4NXM.png?r=229"
className="nav__avatar"
/>
</nav>
);
}
Nav.css
.nav{
position: fixed;
top: 0;
width: 100%;
height: 30px;
z-index: 1;
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
transition-timing-function: ease-in;
transition: all 0.5s;
}
.nav__black {
background-color: #111;
}
.nav__logo{
position: fixed;
left: 40px;
width: 80px;
object-fit: contain;
}
.nav__avatar {
position: fixed;
right: 40px;
width: 30px;
object-fit: contain;
}
Banner.js
import axios from "../api/axios";
import React, { useEffect, useState } from 'react'
import requests from '../api/requests';
import "./Banner.css"
export default function Banner() {
const [movie, setMovie] = useState([]);
useEffect(() => {
fetchData();
}, []);
const fetchData = async() => {
//현재 상영중인 영화 정보를 가져오기 (여러 영화)
const request = await axios.get(requests.fetchNowPlaying);
//여러 영화 중 영화 하나의 ID를 가져오기
const movieId = request.data.results[
Math.floor(Math.random() * request.data.results.length)
].id;
//특정 영화의 더 상세한 정보를 가져오기 (비디오 정보도 포함)
const {data: movieDetail} = await axios.get(`movie/${movieId}`,
{
params: {append_to_reponse: "videos"}
});
setMovie(movieDetail);
}
const truncate = (str, n) => {
return str?. length > n ? str.substr(0, n - 1) + "..." : str;
}
return (
<header
className="banner"
style={{
backgroundImage: `url("https://image.tmdb.org/t/p/original/${movie.backdrop_path}")`,
backgroundPosition: "top center",
backgroundSize: "cover"
}}>
<div className="banner__contents">
<h1 className="banner__title">
{movie.title || movie.name || movie.original_name} </h1>
<div className="banner__buttons">
<button className="banner__button play">Play</button>
<button className="banner__button info">More Information</button>
</div>
<h1 className="banner_description"> {truncate(movie.overview, 100)}
</h1>
</div>
<div className="banner--fadeBottom"></div>
</header>
)
}
Banner.css
.banner{
color: white;
object-fit: contain;
height: 448px;
}
@media (min-width : 1500px) {
.banner{
position: relative;
height: 600px;
}
.banner--fadeBottom{
position: absolute;
bottom: 0;
width: 100%;
height: 40rem;
}
}
@media (max-width : 768px) {
.banner__contents{
width: min-content !important;
padding-left: 2.3rem;
margin-left: 0px !important;
}
.banner--description{
font-size: 0.8rem !important;
width: auto !important;
}
.info{
text-align: start;
padding-right: 1.2rem;
}
.space{
margin-left: 6px;
}
}
axios.js
import axios from "axios";
const instance = axios.create({
baseURL: "https://api.themoviedb.org",
params: {
api_key: "eea00451962aefe6185011d467944242",
language: "ko-KR",
},
});
export default instance;
requests.js
const requests = {
fetchNowPlaying: "movie/now_playing",
fetchNetFlixOriginals: "/discover/tv?with_networks=213",
fetchTrending: "/trending/all/week",
fetchTopRated: "/movie/top_rated",
fetchActionMovies: "/discover/movie?with_genres=28",
fetchComedyMovies: "/discover/movie?with_genres=35",
fetchHorrorMovies: "/discover/movie?with_genres=27",
fetchRomanceMovies: "/discover/movie?with_genres=10749",
fetchDocumentaries: "/discover/movie?with_genres=99",
}
export default requests;
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. hundo1217님께서 언급하신 문제에 대해 몇 가지 조치를 취해볼 수 있습니다. “강의대로 따라갔는데 강의처럼 렌더링이 되고 있지 않습니다” 라는 문제에 대한 디버깅을 위해 다음 몇 가지 사항을 점검해 보시기 바랍니다.
TMDB API 확인:
request.data
를 확인하여 실제로 API로부터 데이터를 받는지 체크하세요.fetchNowPlaying
등) 확인하세요.콘솔 에러 확인:
코드 점검:
Banner.js
에서 append_to_response
파라미터가 잘못 입력되어 있습니다. “videos” 앞의 _
가 빠져있어야 합니다. 이 부분을 append_to_response: "videos"
로 변경하세요.backgroundImage
URL을 콘솔에 출력하여 올바른 URL인지 확인해 주세요.디버깅 콘솔 추가:
fetchData
함수 내부에서 console.log(movieDetail)
을 활용하여 데이터가 올바르게 불러와졌는지 확인하세요.스타일링 확인:
관련된 질문에 대한 답변이 유용할 수 있습니다:
- 선생님 질문있습니다.
- Grid, Load More 버튼 클릭시 style error
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Download the React DevTools for a better development experience: https://react.dev/link/react-devtools
react-dom-client.development.js:2995 Invalid DOM property
srcset
. Did you meansrcSet
?validateProperty @ react-dom-client.development.js:2995Understand this error
api.themoviedb.org/movie/now_playing?api_key=eea00451962aefe6185011d467944242&language=ko-KR:1
Failed to load resource: the server responded with a status of 404 ()Understand this error
Banner.js:25 Uncaught (in promise) AxiosErrorUnderstand this error
api.themoviedb.org/movie/now_playing?api_key=eea00451962aefe6185011d467944242&language=ko-KR:1
Failed to load resource: the server responded with a status of 404 ()Understand this error
Banner.js:25 Uncaught (in promise) AxiosErrorUnderstand this error 추가 에러 발생하고 있습니다 ㅠ