因此,我在react js中从本地drupal示例获取数据。我使用json api模块(以json格式发送数据)传递来自drupal的数据。
下面是我如何获取API并将其Map到前端。
`import React, { useEffect, useState } from "react";
import Slider from "react-slick";
function Homeslidersection() {
const settings = {
dots: false,
arrows: false,
infinite: true,
speed: 500,
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
};
const [posts, setPosts] = useState([]);
useEffect(() => {
async function loadPosts() {
const response = await fetch(
"http://localhost/drupalreact/jsonapi/node/banner?include=field_banner_image"
);
if (!response.ok) {
// oups! something went wrong
return;
}
const posts = await response.json();
setPosts(posts);
}
loadPosts();
}, []);
return (
<>
<Slider {...settings}>
{posts.map((post,index) => (
Looking
Flexible Workspace In Your City!
Our global network of workspaces enable you to work wherever
you need to be.
Read More
))}
</>
);
}
export default Homeslidersection;
`
I know the errorUncaught TypeError: posts.map is not a functionis due my data coming from drupal json api is not in array format.
就像看到图像一样,整个数据是{[]}而不是数组[...]格式
我该如何解决这个错误呢?因为我不能从drupal端修改任何东西,所以我该如何在react js中从我的前端代码解决这个错误呢?
谢谢你!!!
3条答案
按热度按时间c3frrgcw1#
数据在
data
属性中。8ulbf1ek2#
由于从API接收到的数据具有多个属性(
jsonapi
,data
),并且您将整个响应存储在您的状态中,因此它会抛出错误。两种解决方案:
data
数组存储在您所在的州(setPosts(posts.data)
)jsonapi
对象,你可以改变你的map函数(posts.data.map(...)
)k0pti3hp3#
一个原因是实际数据在www.example.com中response.data,所以你应该按照上面的答案来设置状态(response.data)。第二个原因是你的帖子是空的,因为setState()是异步的。这意味着jsx中的帖子在帖子被填充数据之前运行。你可以使用两种方法来解决这个问题。1).条件渲染
2).空值检查(仅在.map前放置?)