javascript - 反应 this.state.bottles.map 不是一个函数
问题描述
我目前有这个要列出酒瓶的 React 组件。我遇到了一个问题,虽然我的组件状态被返回,但我仍然无法映射它。
import React, { Component } from "react";
import Table from 'react-bootstrap/Table'
import Layout from '../../components/layout'
import axios from 'axios';
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
export default class Bottles extends Component {
constructor(props) {
super(props)
this.state = { bottles: [] }
}
componentDidMount() {
axios.get(`http://localhost:3000/api/v1/bottles`)
.then(res => {
const bottles = res.data;
this.setState({ bottles });
})
.catch(function (error) {
console.log(error);
})
}
render() {
return (
<Layout css={{ padding: 0 }} pageTitle="Bottles">
<ul>
{ console.log(this.state.bottles) }
{ this.state.bottles.map(bottle => <li>{bottle.id}</li>)}
</ul>
</Layout>
)
}
}
我在渲染中有一个控制台日志,它似乎渲染了两个不同的项目。我的猜测是 axios 请求完成之前的状态,也许吧?但我不知道如何纠正这一点。
如果我检查我的控制台,我会看到两件事正在输出......
[]
{data: Array(20)}
谁能帮我弄清楚这里发生了什么?这里有点困惑。
解决方案
看起来您的 API 没有像您预期的那样返回一个数组,而是一个对象,即您在控制台中看到的那个。所以只需更改:
const bottles = res.data;
toconst bottles = res.data.data;
它应该可以工作。
推荐阅读
- spring - Spring Boot 2.0 自定义转换器被忽略
- csv - 如何格式化 TSV 文件以与 torchtext 一起使用?
- clojurescript - 什么是相当于'var'的clojurescript?
- android - java.net.UnknownHostException:无法解析主机“
": 没有与主机名关联的地址 - time-complexity - 查找检查数字是否为素数的算法的时间复杂度公式
- ios - iOS:如果服务器数据库顺序发生变化,如何让我的 UITableView 反映它?
- c# - 无法在 C# Windows 窗体应用程序中将图像从数据库显示到 Crystal Report
- cloud9-ide - (节点:2880)UnhandledPromiseRejectionWarning
- c# - C# 记录“线程”上下文
- angular - Angular UI-Grid:对另一行中具有相同值的行进行分组