开发者问题收集

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