javascript - 状态数组在 React.js 中无法正确呈现
问题描述
我正在研究黑客新闻克隆我正在尝试使用 componentDidMount 中的 axios 从他们的 api 获取热门故事的 id,然后进行另一个 axios 调用以获取故事并将它们推送到状态数组中,但是当我尝试映射时并渲染该数组没有显示
class App extends Component {
constructor(props) {
super(props);
this.state = {
posts: []
}
}
componentDidMount() {
axios.get('https://hacker-news.firebaseio.com/v0/topstories.json')
.then( result => {
result.data.slice(0, 10).forEach(element => {
axios.get('https://hacker-news.firebaseio.com/v0/item/' + element + '.json')
.then( value => {
this.state.posts.push(value)
})
.catch(err =>{
console.log(err)
})
})
})
.catch(err => {
console.log(err);
})
}
render() {
return (
<div>
<Header title="Hacker News" />
{this.state.posts.map( (element, index) => <Post key={element.data.id} serialNum={index} postTitle={element.data.title} postVotes={element.data.score} postAuthor={element.data.by} />) }
</div>
)
}
}
解决方案
尝试像这样设置状态:
axios.get('https://hacker-news.firebaseio.com/v0/item/' + element + '.json')
.then( value => {
this.setState({
posts: [value, ...this.state.posts]
})
})
.catch(err =>{
console.log(err)
})
})
这样,您就可以使用setState
每个新值并将其附加到现有状态。
推荐阅读
- agda - 来自标准库“less”的内置“less”
- composer-php - 在 composer.json 中排除文件更新
- angular - 使用 Cypress 测试 Angular 时如何防止整页重新加载?
- java - 获取 Java 和 C# 之间的匹配校验和
- sql-server - 如何根据用户 SSRS 角色分配过滤 SSRS 中的数据
- python - 根据标准获取 Python Pandas 中的第一行数据框,而无需遍历整个数据框
- javascript - 如何根据选项的值设置只读选择的样式?
- google-apps-script - 无法从通用操作的回调函数返回卡片标记
- c# - 在 C# 中仅复制新的或修改的文件/目录
- javascript - Using Conditional If statements with JavaScript DOM Table?