Неопределенный объект в реагировать JS - PullRequest
0 голосов
/ 23 июня 2018

Я получаю следующую ошибку:

Uncaught ReferenceError: videos2 is not defined

В этом приложении:

class App extends Component {
constructor(props) {
    super(props)

    this.state = {
        videos2:[],
        selectedVideo:null
    }

    this.DMSearch()
}

    DMSearch(){
        fetch("https://api.dailymotion.com/videos?fields=description,id,thumbnail_url,title,&limit=5&search=cars")
        .then(response => response.json())
        .then(data=>this.setState({
            videos2:data.videos2, 
            selectedVideo:videos2[0]}))
        console.log(videos2)
    }
    render () {
        const {videos2}=this.state
        return (
            <div>
                <SearchBar onSearchTermChange= {DMSearch}/>
                <VideoDetail video={this.state.selectedVideo}/> 
                <VideoList 
                onVideoSelect={selectedVideo=>this.setState({selectedVideo})}
                videos2={this.state.videos2}/>
            </div>
        )
    }
}  

Поэтому мне интересно, где я должен определять видео2 отдельно от того, где оно уже определено.Кто-нибудь может указать мне на ту часть компонента, которая может быть причиной ошибки?

РЕДАКТИРОВАТЬ: На самом деле это было связано с тем, как Api JSON был сформирован.Это правильный способ получить список из json:

this.setState({
               videos2: videos2.list, 
               selectedVideo: videos2[0]
            });

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

В DMS-поиске videos2 не определено.

DMSearch() {
  fetch("https://api.dailymotion.com/videos?fields=description,id,thumbnail_url,title,&limit=5&search=cars")
    .then(response => response.json())
    .then(data => {
      let videos2 = data.videos2; //define it here

      this.setState({
        videos2: videos2,
        selectedVideo: videos2[0] // <-- this line will throw error
      })
    })
  console.log(videos2) // <-- and this too
}
0 голосов
/ 23 июня 2018

В функции DMSearch не определена переменная videos2.Вы, вероятно, хотите:

.then(data => {
    this.setState({
       videos2: data.videos2, 
       selectedVideo: data.videos2[0]
    });
    console.log(data.videos2);
 });        

или

.then(data => {
    const { videos2 } = data;
    this.setState({
       videos2,
       selectedVideo:videos2[0]
    });
    console.log(videos2);
 });  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...