javascript - 在将 API 数据传递到组件方面需要帮助
问题描述
我正在开发一个非常简单的电影查找器,它将返回包含用户输入的电影名称的电影列表。现在,我只是想在屏幕上显示信息。
我正在使用 React,我很难让它工作。我有三个组件,我的主要 App 组件,将显示结果列表的 movieView 组件,以及将显示电影标题、概述和主页的电影组件本身。我是 React 的新手,所以我试图了解如何使它工作。以下是我对每个组件的代码:
**APP COMPONENT:**
import React, { Component } from 'react';
import Axios from 'axios';
import MovieView from './movieview';
// import NewsView from './NewsView';
class App extends Component {
constructor(props) {
super(props);
this.state = {
queryMovie: '',
results: [],
newsdata:'',
movieFound: false,
};
this.handleInputChange = this.handleInputChange.bind(this);
this.searchMovie = this.searchMovie.bind(this);
}
handleInputChange(event) {
event.preventDefault()
this.setState({
[event.target.name]: event.target.value,
});
}
searchMovie(event) {
console.log(this.state.queryMovie)
event.preventDefault()
Axios
.get(`/api?query=${this.state.queryMovie}`)
.then(results => results.data)
.then(results => this.setState({
results: results,
movieFound: true,
queryMovie: '',
}))
}
componentWillMount() {
Axios
.get(`http://newsapi.org/v2/top-headlines?country=us&category=entertainment&apiKey=4a6b942733e54342962e5df94feb48aa`)
.then(response => response.data)
.then(newsdata => this.setState({ newsdata }));
console.log('console inside componentwillmount', this.state.newsdata)
}
render() {
return (
<div className="container">
<div className="headerbodycontainer">
<h2>App with 2 APIs</h2>
<h4>Movie Finder and Entertainment News</h4>
</div>
<div className="row">
<div className="col-6">
<div className="headerbodycardcontainer">
<div className="card-header">Movie Finder</div>
<div className="card-body">
<input name="queryMovie" onChange={this.handleInputChange} placeholder="Enter Movie" value={this.state.queryMovie}></input>
<button onClick={this.searchMovie}>Search Movie</button>
</div>
<div className="container">
<MovieView
results={this.state.results}
movieFound={this.state.movieFound}
/></div>
</div>
</div>
<div className="col-6">
<div className="headerbodycontainer">
<div className="card-header">ENTERTAINMENT NEWS</div>
{/* {
this.state.newsdata.map(article => (
<NewsView
title={article.title}
description={article.description}
url={article.url}
/>
))
} */}
<div className="card-body"></div>
</div>
</div>
</div>
</div>
);
}
}
export default App;
**MovieView component:**
import React, { Component } from 'react'
import Movie from './movie'
const MovieView = (props) => {
console.log(props.movieFound, 'props passed to movieview')
console.log(props.results.results, 'results inside movieview')
if (props.movieFound == true && props.results.results.length>0) {
return (<div><Movie movieData={props.results}/></div>)
} else {
return <div>HELLO WORLD</div>
}
}
export default MovieView;
**Movie component:**
import React from 'react';
const Movie = (props) => {
console.log(props, 'inside movie comp')
console.log(props.results, 'inside props results')
props.results.map((movie) => {
return <div>
<ul>
<li>Movie title: {movie.original_title}</li>
<li>Overview: {movie.overview}</li>
<li>Homepage: {movie.homepage}</li>
</ul>
</div>
})
}
export default Movie;
所以现在我进入了电影组件,但我收到一个错误,表明我目前没有返回任何东西。任何帮助或反馈将不胜感激。谢谢!
解决方案
您的Movie
组件需要返回有效的 JSX,即元素数组或 null。
const Movie = (props) => {
console.log(props, 'inside movie comp');
console.log(props.results, 'inside props results');
return props.results.map((movie) => { // return the mapped array of movies
return (
<div>
<ul>
<li>Movie title: {movie.original_title}</li>
<li>Overview: {movie.overview}</li>
<li>Homepage: {movie.homepage}</li>
</ul>
</div>
);
})
}
MovieView
还包括对 的无效引用results
。props.results
与props.results.results
.
const MovieView = (props) => {
console.log(props.movieFound, 'props passed to movieview')
console.log(props.results, 'results inside movieview')
if (props.movieFound && props.results.length) {
return (<div><Movie movieData={props.results}/></div>)
} else {
return <div>HELLO WORLD</div>
}
}
推荐阅读
- python - 使用 seaborn `FacetGrid` 将箱线图排列为网格
- android-studio - 如何在设备上跟踪 Flutter UI Android Studio 测试执行?
- sql-server - SQL Server 数据库事务文件的“已用日志空间百分比”非常低
- python - 在 python 中将 .objs 转换为 .mat 或在 linux 中使用程序
- javascript - 如何观看反应场(动态添加useEffect)?
- excel - 如何检查最后 4 个字符是否为 .pdf- VBA 代码
- python - 更改 UniVerse 中的默认 RUNPY 目录
- javascript - 降低功能复杂度
- amazon-web-services - 如何授予用户对特定 Azure 服务的权限(就像使用 AWS 的 IAM 一样)?
- .net-core - 如何将 Azure 函数 V3 与 Entity Framework 6 一起使用(异常 System.Data.SqlClient: System.Data.SqlClient is not supported on this platform)?