import Movie from './Movie';
import axios from 'axios';
import yargsParser from 'yargs-parser';
function App() {
const [isLoading, setLoading] = useState(true)
const [movies, setMovie] = useState([])
const getMovies = async () => {
const {data: {data: { movies }}} = await axios.get("https://yts.lt/api/v2/list_movies.json?sort_by=rating");
setMovie([{movies}])
setLoading(false)
}
useEffect(() => {
getMovies();
}, [])
return (
<div className="App">
{isLoading ? "we are loading bunch of movies" : movies.map(movie => console.log(movie))}
</div>
);
}
export default App;
这里的问题是,当我检查控制台时,电影状态上的map函数正在返回单个对象,包括其中的所有其他对象,
而不是分别返回所有对象。我想知道为什么?因此,当我使用以下Movie组件更新退货时,
return (
<div className="App">
{isLoading ? "we are loading bunch of movies" : movies.map(movie => (
<Movie key={movie.id} />
))}
</div>
);
这就是电影组件的外观
import React, { useState } from 'react'
import PropTypes from 'prop-types';
export default function Movie({ id, year, title, summary, poster }){
return <h4>{title}</h4>
}
Movie.propTypes = {
id: PropTypes.number.isRequired,
year: PropTypes.number.isRequired,
title: PropTypes.string.isRequired,
summary: PropTypes.string.isRequired,
poster: PropTypes.string.isRequired
}
电影组件未收到正确的道具。 我导入prop-types进行检查,并显示
我想知道如何处理电影状态才能为电影组件获取正确的道具?
答案 0 :(得分:1)
return (
<div className="App">
{isLoading ? "we are loading bunch of movies" : movies.movies.map(movie => (
<Movie key={movie.id} {...movie}/>
))}
</div>);
或
setMovie(movies)
在绑定数组时仔细检查,当前看来键是电影,值是数组。您想直接绑定数组
答案 1 :(得分:0)
您应该通过电影作为道具
return (
<div className="App">
{isLoading ? "we are loading bunch of movies" : movies.map(movie => (
<Movie key={movie.id} {...movie} />
))}
</div>
);
答案 2 :(得分:0)
您需要将所有道具传递到组件中
错误代码:
<Movie key={movie.id} {...props}/>
您可以传递此组件所需的任何信息...
答案 3 :(得分:0)
您没有传递其余数据
return (
<div className="App">
{isLoading ? "we are loading bunch of movies" : movies.map(movie => (
<Movie key={movie.id} {...movie}/>
))}
</div>
);
答案 4 :(得分:0)
错误似乎出在对setMovie
的调用中-如果您希望状态包含电影数组,则不应该创建一个内部带有对象的数组,而只需将其更改为>
setMovie(movies)
答案 5 :(得分:0)
在上面的Movie
组件中,结果对象未作为prop传递给该组件。取而代之的是,仅使用map来渲染组件,并且具有唯一键传递给组件的数组中数据的存在次数。
该代码可用作
<Movie key={movie.id} {...movie} />
OR
<Movie key={movie.id} id={movie.id} year={movie.year} title={movie.title} summary={movie.summary} poster={movie.poster} />
答案 6 :(得分:-1)
const getMovies = async () => {
const {data: {data: { movies }}} = await axios.get("https://yts.lt/api/v2/list_movies.json?sort_by=rating");
**setMovie([ ...movies ])**
setLoading(false)
}