首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译失败:未定义'movies‘(React)

编译失败:未定义'movies‘(React)
EN

Stack Overflow用户
提问于 2021-09-23 06:28:18
回答 1查看 57关注 0票数 0

当我试图搜索一部电影并返回一组电影的响应时,我在react应用程序中收到了这个错误消息。

代码语言:javascript
复制
src/App.js
  Line 42:9:   'movies' is not defined  no-undef
  Line 42:19:  'movies' is not defined  no-undef

下面是src/App.js:

代码语言:javascript
复制
import React from 'react';
import './App.css';
import unirest from 'unirest';
import Movie from './movie';
import Search from './search';

class App extends React.Component {
  state = {
    movies: []
  }

 sendRequest = (title) => {

   const req = unirest("GET", "https://movie-database-imdb-alternative.p.rapidapi.com/");

   req.query({
     "page": "1",
     "r": "json",
     "s": title
   });

   req.headers({
    'x-rapidapi-host': 'movie-database-imdb-alternative.p.rapidapi.com',
    'x-rapidapi-key': 'my_api_key'
   });


   req.end((res) => {
     if (res.error) throw new Error(res.error);
     const movies = res.body.Search;
     this.setState({movies});

     console.log(res.body);
   });
 }

 render() {
   return (
     <div className="App">
       <header className="App-header">
       {
        movies && movies.length ? this.state.movies.map((movie) => {
          return <Movie {...movie}/>
        })
        : null
        }
         <Search handleSendRequest={this.sendRequest}/>
       </header>
     </div>
   );
 }
}

export default App;

我不知道为什么它说'movies‘是未定义的,我已经在类本身的开头将它设置为状态的一部分。由于某种原因,req.end函数似乎没有访问状态对象?

EN

回答 1

Stack Overflow用户

发布于 2021-09-23 06:34:17

要么必须在render中展开状态,要么使用this.state.movies

使用解构的

代码语言:javascript
复制
import React from 'react';
import './App.css';
import unirest from 'unirest';
import Movie from './movie';
import Search from './search';

class App extends React.Component {
  state = {
    movies: []
  }

 sendRequest = (title) => {

   const req = unirest("GET", "https://movie-database-imdb-alternative.p.rapidapi.com/");

   req.query({
     "page": "1",
     "r": "json",
     "s": title
   });

   req.headers({
    'x-rapidapi-host': 'movie-database-imdb-alternative.p.rapidapi.com',
    'x-rapidapi-key': 'my_api_key'
   });


   req.end((res) => {
     if (res.error) throw new Error(res.error);
     const movies = res.body.Search;
     this.setState({movies});

     console.log(res.body);
   });
 }

 render() {
   const {movies} = this.state; // Use Destructuring
   return (
     <div className="App">
       <header className="App-header">
       {
        movies && movies.length ? this.state.movies.map((movie) => {
          return <Movie {...movie}/>
        })
        : null
        }
         <Search handleSendRequest={this.sendRequest}/>
       </header>
     </div>
   );
 }
}

export default App;

或访问状态

代码语言:javascript
复制
import React from 'react';
import './App.css';
import unirest from 'unirest';
import Movie from './movie';
import Search from './search';

class App extends React.Component {
  state = {
    movies: []
  }

 sendRequest = (title) => {

   const req = unirest("GET", "https://movie-database-imdb-alternative.p.rapidapi.com/");

   req.query({
     "page": "1",
     "r": "json",
     "s": title
   });

   req.headers({
    'x-rapidapi-host': 'movie-database-imdb-alternative.p.rapidapi.com',
    'x-rapidapi-key': 'my_api_key'
   });


   req.end((res) => {
     if (res.error) throw new Error(res.error);
     const movies = res.body.Search;
     this.setState({movies});

     console.log(res.body);
   });
 }

 render() {
   return (
     <div className="App">
       <header className="App-header">
       { // Use this.state to access movies. 
        this.state.movies && this.state.movies.length ? this.state.movies.map((movie) => {
          return <Movie {...movie}/>
        })
        : null
        }
         <Search handleSendRequest={this.sendRequest}/>
       </header>
     </div>
   );
 }
}

export default App;

编辑:修复未定义的res.body

代码语言:javascript
复制
import React from 'react';
import './App.css';
import unirest from 'unirest';
import Movie from './movie';
import Search from './search';

class App extends React.Component {
  state = {
    movies: []
  }

 sendRequest = (title) => {

   const req = unirest("GET", "https://movie-database-imdb-alternative.p.rapidapi.com/");

   req.query({
     "page": "1",
     "r": "json",
     "s": title
   });

   req.headers({
    'x-rapidapi-host': 'movie-database-imdb-alternative.p.rapidapi.com',
    'x-rapidapi-key': 'my_api_key'
   });


   req.end((res) => {
     if (res.error) throw new Error(res.error);
     if(res && res.body && res.body.Search) {
       const movies = res.body.Search;
       this.setState({movies});
     }
     console.log(res.body);
   });
 }

 render() {
   return (
     <div className="App">
       <header className="App-header">
       {
        this.state.movies && this.state.movies.length ? this.state.movies.map((movie) => {
          return <Movie {...movie}/>
        })
        : null
        }
         <Search handleSendRequest={this.sendRequest}/>
       </header>
     </div>
   );
 }
}

export default App;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69294977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档