[英]React Get data from json-server and display in slider
我有一个 JSON 作为服务器,JSON 有一个“食谱”数组,里面有对象
"recipes": [
{
"id": "1",
"title": "Arepa",
"description": "...",
"image": "...",
"preparation": "...",
"ingredients": "..",
"notes": "..."
},
{
"id": "2",
"title": "Burritos",
"description": "...",
"image": "...",
"preparation": "...",
"ingredients": "...",
"notes": "..."
}
我试图将图像显示到带有循环的 slider 中,但我得到的唯一一件事是错误和沮丧,我无法轻松获取数据,但显示它让我出错,我尝试了很多东西,但没有任何效果。 这是我的代码。
TopTen.js
import { CarouselProvider, Slider, ButtonBack, ButtonNext } from 'pure-react-carousel';
const Topten = () => {
return (
<div id="topTenContainer">
<CarouselProvider
naturalSlideWidth={100}
naturalSlideHeight={125}
totalSlides={3}
>
<Slider>
//// here must be the images ////
</Slider>
<ButtonBack>Back</ButtonBack>
<ButtonNext>Next</ButtonNext>
</CarouselProvider>
</div>
);
};
export default Topten;
当我尝试创建异步 function 并尝试放入时,出现此错误 => Error: Objects are not valid as a React child (found: [object Promise]). If you meant to render a collection of children, use an array instead.
Error: Objects are not valid as a React child (found: [object Promise]). If you meant to render a collection of children, use an array instead.
这里的例子
import database from "../api/database"
const Sliderr = async() =>{
const responde = await database.get('recipes');
const recipes = responde.data;
return(
{
recipes.map(post =>{
return(
<div key={post.id}>
<h1>{post.title}</h1>
</div>
)
})
}
)
}
export default Sliderr
请问有什么帮助吗?
您可以在控制台中打印“recipe”和“responde”值吗? 如果可以打印,请尝试将指定变量的常量从“const”拉到“var”。首先,确保返回的答案。 进行分步操作。
recipes?.map(post =>{
return(
<div key={post?.id}>
<h1>{post?.title}</h1>
</div>
)
})
您必须检查数据是否有标题字段使用标记问题呈现 h1 组件
好吧,主要问题实际上正如日志中所述:您的 Slider 组件应该返回一个非异步 function。 当您在 TopTen.js 的 jsx 块中使用函数/功能组件“Sliderr”时,它会返回TopTen.js
,因为它被声明为异步 function。
您可以在 useEffect 中处理异步方面,例如
const Topten = () => {
const [data, setData] = useState([]);
useEffect(() => {
const getPosts = async () => setData(await database.get('recipes'));
getPosts();
}, []);
return (
<div id="topTenContainer">
<CarouselProvider
naturalSlideWidth={100}
naturalSlideHeight={125}
totalSlides={data.length}
>
<Slider>
{data.map(post => <Slide>{post.title}</Slide>)}
</Slider>
<ButtonBack>Back</ButtonBack>
<ButtonNext>Next</ButtonNext>
</CarouselProvider>
</div>
);
};
您仍然需要将您的 Slider 组件重构为 Slide,尽管将 post.title 作为 children-prop。
在此基础上,您可以考虑将 api 调用提取到自定义挂钩中。
[编辑:对不起我的乐观态度。 我省略了请求的错误处理]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.