如何使用像 useEffect 和 useState 这样的 Hooks 在 Api 的 React js 中使用 Map 函数
How to use Map function in react js with Api using Hooks like useEffect and useState
嗨,我是新手,开始学习新东西。我实际上陷入了一种情况,我知道解决方案是如何实现的,但我不知道实现部分。
我正在尝试使用 API 通过 Await Async 并在我的卡中显示数据。我可以在控制台日志中看到结果,但在卡片中看不到。
据我所知,我必须使用地图功能将数据映射到我的卡上才能看到所有数据。如有不妥请指正
另外,如果你能让我知道接下来需要做什么,看看我的代码,那会怎么样。
import React, { useEffect, useState } from "react";
import {
Button,
Card,
CardActionArea,
CardActions,
CardContent,
CardMedia,
} from "@material-ui/core";
const cardStyle = {
cardMain: {
maxWidth: "300px",
maxHeight: "300px",
margin: "10px",
},
cardImage: {
height: "150px",
backgroundImage:
"url(" +
"https://images.unsplash.com/photo-1517971129774-8a2b38fa128e?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=634&q=80" +
")",
marginLeft: "7px",
marginRight: "7px",
marginTop: "5px",
},
};
const Produts = () => {
const [movieData, setMovieData] = useState([]);
const getMovieList = async () => {
const url =
"http://api.themoviedb.org/3/search/movie?api_key=myapikey&query=Avengers";
const response = await fetch(url);
try {
const responseJson = await response.json();
console.log(responseJson);
setMovieData = responseJson.results;
} catch (err) {
console.error(err);
}
};
useEffect(() => {
getMovieList();
}, []);
return (
<>
<Card style={cardStyle.cardMain}>
<CardActionArea>
{setMovieData.original_title}
<CardMedia style={cardStyle.cardImage}>
{setMovieData.original_image}
</CardMedia>
<CardContent>{setMovieData.original_date}</CardContent>
</CardActionArea>
<CardActions style={cardStyle.cardButton}>
<Button>Watch</Button>
<Button>Like</Button>
<Button>Rent</Button>
</CardActions>
</Card>
</>
);
};
export default Produts;
非常感谢任何帮助或建议。
试试这个:
const Produts = () => {
const [movieData, setMovieData] = useState([]);
const getMovieList = async () => {
const url =
"http://api.themoviedb.org/3/search/movie?api_key=myapikey&query=Avengers";
const response = await fetch(url);
try {
const responseJson = await response.json();
console.log(responseJson);
setMovieData(responseJson.results);
} catch (err) {
console.error(err);
}
};
useEffect(() => {
getMovieList();
}, []);
return (
<>
movieData.map ((movie) => (
<Card style={cardStyle.cardMain}>
<CardActionArea>
{movie.original_title}
<CardMedia style={cardStyle.cardImage}>
{movie.original_image}
</CardMedia>
<CardContent>{movie.original_date}</CardContent>
</CardActionArea>
<CardActions style={cardStyle.cardButton}>
<Button>Watch</Button>
<Button>Like</Button>
<Button>Rent</Button>
</CardActions>
</Card>
))
</>
);
};
首先你使用的 useState 是错误的尝试这种方式 setMovieData(responseJson.results) 然后将它用于 map
<div>
{ movieDate.map(movie =>{
<Card style={ cardStyle.cardMain }>
<CardActionArea>{ movie .original_title }
< CardMedia style = { cardStyle.cardImage } > { movie .original_image } < /CardMedia>
< CardContent > { movie .original_date } < /CardContent>
< /CardActionArea>
< CardActions style = { cardStyle.cardButton } >
<Button>Watch < /Button>
< Button > Like < /Button>
< Button > Rent < /Button>
< /CardActions>
< /Card>}
})
< /div>
const Produts = () => {
const [movieData, setMovieData] = useState([]);
const getMovieList = async () => {
const url =
"http://api.themoviedb.org/3/search/movie?api_key=myapikey&query=Avengers";
const response = await fetch(url);
try {
const responseJson = await response.json();
const data = responseJson.results;
setMovieData(data);
} catch (err) {
console.error(err);
}
};
useEffect(() => {
getMovieList();
}, []);
return (
<>
{movieData.map((movie) => {
return (
<Card style={cardStyle.cardMain} key={movie.id}>
<CardActionArea>
{movie.original_title}
<CardMedia style={cardStyle.cardImage}>CardMedia</CardMedia>
<CardContent>cardContainer</CardContent>
</CardActionArea>
<CardActions style={cardStyle.cardButton}>
<Button>Watch</Button>
<Button>Like</Button>
<Button>Rent</Button>
</CardActions>
</Card>
);
})}
</>
);
};
export default Produts;
嗨,我是新手,开始学习新东西。我实际上陷入了一种情况,我知道解决方案是如何实现的,但我不知道实现部分。
我正在尝试使用 API 通过 Await Async 并在我的卡中显示数据。我可以在控制台日志中看到结果,但在卡片中看不到。
据我所知,我必须使用地图功能将数据映射到我的卡上才能看到所有数据。如有不妥请指正
另外,如果你能让我知道接下来需要做什么,看看我的代码,那会怎么样。
import React, { useEffect, useState } from "react";
import {
Button,
Card,
CardActionArea,
CardActions,
CardContent,
CardMedia,
} from "@material-ui/core";
const cardStyle = {
cardMain: {
maxWidth: "300px",
maxHeight: "300px",
margin: "10px",
},
cardImage: {
height: "150px",
backgroundImage:
"url(" +
"https://images.unsplash.com/photo-1517971129774-8a2b38fa128e?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=634&q=80" +
")",
marginLeft: "7px",
marginRight: "7px",
marginTop: "5px",
},
};
const Produts = () => {
const [movieData, setMovieData] = useState([]);
const getMovieList = async () => {
const url =
"http://api.themoviedb.org/3/search/movie?api_key=myapikey&query=Avengers";
const response = await fetch(url);
try {
const responseJson = await response.json();
console.log(responseJson);
setMovieData = responseJson.results;
} catch (err) {
console.error(err);
}
};
useEffect(() => {
getMovieList();
}, []);
return (
<>
<Card style={cardStyle.cardMain}>
<CardActionArea>
{setMovieData.original_title}
<CardMedia style={cardStyle.cardImage}>
{setMovieData.original_image}
</CardMedia>
<CardContent>{setMovieData.original_date}</CardContent>
</CardActionArea>
<CardActions style={cardStyle.cardButton}>
<Button>Watch</Button>
<Button>Like</Button>
<Button>Rent</Button>
</CardActions>
</Card>
</>
);
};
export default Produts;
非常感谢任何帮助或建议。
试试这个:
const Produts = () => {
const [movieData, setMovieData] = useState([]);
const getMovieList = async () => {
const url =
"http://api.themoviedb.org/3/search/movie?api_key=myapikey&query=Avengers";
const response = await fetch(url);
try {
const responseJson = await response.json();
console.log(responseJson);
setMovieData(responseJson.results);
} catch (err) {
console.error(err);
}
};
useEffect(() => {
getMovieList();
}, []);
return (
<>
movieData.map ((movie) => (
<Card style={cardStyle.cardMain}>
<CardActionArea>
{movie.original_title}
<CardMedia style={cardStyle.cardImage}>
{movie.original_image}
</CardMedia>
<CardContent>{movie.original_date}</CardContent>
</CardActionArea>
<CardActions style={cardStyle.cardButton}>
<Button>Watch</Button>
<Button>Like</Button>
<Button>Rent</Button>
</CardActions>
</Card>
))
</>
);
};
首先你使用的 useState 是错误的尝试这种方式 setMovieData(responseJson.results) 然后将它用于 map
<div>
{ movieDate.map(movie =>{
<Card style={ cardStyle.cardMain }>
<CardActionArea>{ movie .original_title }
< CardMedia style = { cardStyle.cardImage } > { movie .original_image } < /CardMedia>
< CardContent > { movie .original_date } < /CardContent>
< /CardActionArea>
< CardActions style = { cardStyle.cardButton } >
<Button>Watch < /Button>
< Button > Like < /Button>
< Button > Rent < /Button>
< /CardActions>
< /Card>}
})
< /div>
const Produts = () => {
const [movieData, setMovieData] = useState([]);
const getMovieList = async () => {
const url =
"http://api.themoviedb.org/3/search/movie?api_key=myapikey&query=Avengers";
const response = await fetch(url);
try {
const responseJson = await response.json();
const data = responseJson.results;
setMovieData(data);
} catch (err) {
console.error(err);
}
};
useEffect(() => {
getMovieList();
}, []);
return (
<>
{movieData.map((movie) => {
return (
<Card style={cardStyle.cardMain} key={movie.id}>
<CardActionArea>
{movie.original_title}
<CardMedia style={cardStyle.cardImage}>CardMedia</CardMedia>
<CardContent>cardContainer</CardContent>
</CardActionArea>
<CardActions style={cardStyle.cardButton}>
<Button>Watch</Button>
<Button>Like</Button>
<Button>Rent</Button>
</CardActions>
</Card>
);
})}
</>
);
};
export default Produts;