React netflix 克隆映射图像问题
2022-08-07
350
我是编码新手。尝试学习 React。我尝试创建一个 Netflix 克隆。当我尝试为不同类别的电影渲染图像时,它不会显示在浏览器中。控制台显示以下错误:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'protocol')
import './App.css';
import Nav from './Nav';
import Banner from './Banner'
import Row from './Row';
import requests from './requests';
function App() {
return (
<div className="app">
<Nav/>
<Banner/>
<Row/>
<Row
title= {requests.fetchNetflixOriginals}
isLargeRow={true}
/>
<Row title="Trending Now" fetchurl={requests.fetchTrending} />
<Row title="Top Rated" fetchurl={requests.fetchTopRated} />
<Row title="Action Movies" fetchurl={requests.fetchActionMovies} />
<Row title="Comedy Movies" fetchurl={requests.fetchComedyMovies} />
<Row title="Horror Movies" fetchurl={requests.fetchHorrorMovies} />
<Row title="Documentaries" fetchurl={requests.fetchDocumentaries} />
</div>
);
}
export default App;
import React, {useState,useEffect} from 'react';
import './Row.css'
import axios from 'axios'
import YouTube from 'react-youtube'
import movietrailer from 'movie-trailer'
function Row({title, fetchurl, isLargeRow}) {
const base_url= "https://image.tmdb.org/t/p/original/";
const[movies, setMovies]= useState([]);
const[trailerurl, setTrailerurl]= useState("");
useEffect(()=> {
async function fetchData() {
const request = await axios.get(fetchurl);
setMovies(request.data.results);
return request;
}
fetchData();
}, [fetchurl]);
return (
<div className="row">
<h2>{title}</h2>
<div className="row__posters">
{movies.map((movie) => (
<img
src={`${base_url}${
isLargeRow ? movie.poster_path : movie.backdrop_path
}`}
alt={movie.name}
/>
))}
</div>
</div>
)
}
export default Row
2个回答
你可以搜索协议的位置,找出它未定义的原因
Kenny1997
2022-08-07
您可以将
console.log(request)
放在
const request = ...
之后进行检查。
当请求后无法获得响应时,promise 中会发生错误。在 promise 函数中,它始终等待响应或拒绝。在您的代码中,Row 函数的 useEffect 中有一个 promise 函数,
async function fetchData() {
const request = await axios.get(fetchurl);
setMovies(request.data.results);
return request;
}
当 promise 函数询问请求(
axios.get(fetchurl)
)时,它会等待响应或拒绝。无论是响应还是拒绝,代码都会按编码运行。在代码中,请求后,它继续使用
setMovies(request.data.results)
并获取结果。但如果结果为
undefined
,则会出现错误。因此,如果使用代码发生错误,您可以处理。或者您可以检查错误。您可以将
console.log(request)
放在
const request = ...
之后。
jacobkim
2022-08-07