Ознакомился с курсом udemy по реакции и сокращению по созданию простого видеоплеера, пока мой сайт не начал рендерить одну и ту же страницу более 10 раз, как если бы в цикле, как показано ниже. Пожалуйста, помогите нам решить эту проблему. Прилагаю файлы моего проекта для различных компонентов. см. картинку
Этот файл содержит компонент приложения (родительский).
import React,{Component} from 'react';
import ReactDOM from 'react-dom';
import SearchBar from './components/search_bar';
import YTSearch from 'youtube-api-search';
import VideoList from './components/video_list';
import VideoDetail from './components/video_detail';
const API_KEY = 'AIzaSyCAfItybV7pSzxmwTj5wyG5SErMs5HYlRQ';
class App extends Component{
constructor(props){
super(props);
this.state = {videos: []};
YTSearch({key: API_KEY, term: 'internet of things'}, (videos) => {
this.setState({videos});
});
}
render() {
return (
<div>
<SearchBar />
<VideoDetail video = {this.state.videos[0]} />
<VideoList videos = {this.state.videos} />
</div>
);
}
}
ReactDOM.render(<App />, document.querySelector('.container'));Файл video_detail.js содержит код для компонента VideoDetail.
import React from 'react';
const VideoDetail = ({video}) =>{
if (!video){
return <div>Loading...</div>;
}
const videoId = video.id.videoId;
const url = `www.youtube.com/embed/${videoId}`;
return(
<div className = "video-detail col-md-8">
<div className = "embed-responsive embed-responsive-16by9">
<iframe className = "embed-responsive-item" src = {url}></iframe>
</div>
<div className = "details">
<div>{video.snippet.title}</div>
<div>{video.snippet.description}</div>
</div>
</div>
);
};
export default VideoDetail;video_list_item.js содержит код для компонента VideoListItem
import React from 'react';
const VideoListItem = ({video}) =>{
const imgUrl = video.snippet.thumbnails.default.url;
return(
<li className = "list-group-item">
<div className = "video-list media" >
<div className = "media-left">
<img className = "media-object" src = {imgUrl}/>
</div>
<div className = "media-body">
<div className = "media-heading">{video.snippet.title}</div>
</div>
</div>
</li>
)
}
export default VideoListItem;video_list.js содержит код для компонента VideoList, как показано ниже.
import React from 'react';
import VideoListItem from './video_list_item';
const VideoList = (props) => {
const videoItems = props.videos.map((video) => {
return <VideoListItem video = {video} key = {video.etag} />;
});
return(
<ul className = "col-md-4 list-group">
{videoItems}
</ul>
);
}
export default VideoList;search_bar.js содержит код для компонента SearchBar, который я еще не подключил.
import React, {Component} from 'react';
class SearchBar extends Component{
constructor(props) {
super(props);
this.state = {term: ''};
}
render(){
return(
<div>
<input />
</div>
);
}
};
export default SearchBar;index.html содержит код страницы для загрузки компонента и ссылку на ускорение.
<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "/style/style.css">
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css">
<script src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyAq06l5RUVfib62IYRQacLc-KAy0XIWAVs"></script>
</head>
<body>
<div class = "container"></div>
</body>
<script src = "/bundle.js"></script>
</html>Если можете, предоставьте ссылку на github для своего проекта. Или, что еще лучше, вы можете клонировать свой проект на stackblitz (это отличный инструмент) и предоставить ссылку на рабочий пример.
есть ли в вашем приложении несколько HTML-элементов с className как container
@DBS Это произошло для решения проблемы. Спасибо за догадку?
@Revansiddh Вовсе нет, редактирование переменной url в компоненте VideoDetail помогло решить проблему. Спасибо за попытку
@AkshayMilmile github.com/ahebwa49/react-video-player.git Однако изменение переменной url в компоненте VideoDetail для включения https: // помогло решить проблему. Спасибо за попытку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это очень приблизительное предположение, поскольку я не могу на самом деле решить проблему (стоит включить рабочий пример, если вы можете), но изображение выглядит так, как будто вы рекурсивно включаете ту же страницу в iframe. Опять же, серьезные догадки, но вам может потребоваться добавить
http://перед URL-адресомconst url = www.youtube.com/embed/${videoId};, чтобы он был правильно связан.