TypeError:无法读取 React 中未定义的属性(读取‘id’)
2021-11-04
1700
我建了一个网站,但当我按了 3 次“加载更多”按钮后,出现了问题。它给出了一个错误“TypeError:无法读取未定义的属性(读取‘id’)”...我猜切片和映射函数出了问题! P.S. 我试图将“id”调用到其他组件,但没有成功!
class PostsList extends React.Component {
constructor(props) {
super(props);
this.state = {
posts: [],
visible: 3,
error: false
};
this.loadMore = this.loadMore.bind(this);
}
loadMore() {
this.setState((prev) => {
return {visible: prev.visible + 3};
});
}
componentDidMount() {
fetch("https://jsonplaceholder.typicode.com/posts").then(
res => res.json()
).then(res => {
this.setState({
posts: res
});
}).catch(error => {
console.error(error);
this.setState({
error: true
});
});
}
render() {
const { classes } = this.props;
return (
<div className={classes.section}>
<h2 className={classes.title}>Latest news</h2>
<div>
<GridContainer>
{
this.state.posts.slice(0, this.state.visible).map((post, i) => {
return (
<PostCard key={i}
id={posts[i].id}
date={posts[i].date}
fbimg={posts[i].fbimg}
description={posts[i].description}
fbpost={posts[i].fbpost}
/>
);
})
}
</GridContainer>
<GridContainer>
<GridItem>
{this.state.visible < this.state.posts.length &&
<Button
color="info"
onClick={this.loadMore}
>
Load more
</Button>
}
</GridItem>
</GridContainer>
</div>
</div>
);
}
}
提前谢谢您!!!
1个回答
posts
未在您的渲染函数中定义。您是指
this.state.posts
吗?
此外,当您的
map
函数中已有单个
post
时,无需使用索引来访问帖子。因此,请将
posts[i].id
更改为
post.id
。
larz
2021-11-04