【发布时间】:2020-03-23 12:45:17
【问题描述】:
我正在尝试从我找到的 API Here 中获取要显示的图像,但我在控制台中收到以下错误..
Fetch API 错误:TypeError: this.state.dogs.map is not a function
代码如下:
<html>
<head>
<title>ICS 211 - React</title>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script crossorigin src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/styled-components/dist/styled-components.min.js"></script>
<meta charset="utf-8"></meta>
<!-- google font -->
<link href="https://fonts.googleapis.com/css?family=Lato&display=swap" rel="stylesheet">
<style>
html {
background-color: #f8f8f8;
font-family: 'Roboto', sans-serif;
}
</style>
</head>
<body>
<div id="container"></div>
<script type="text/babel">
class AppClassStateful extends React.Component {
constructor(props) {
super(props);
this.state = { dogs: [] };
};
componentDidMount() {
(async () => {
try {
const response = await fetch('https://dog.ceo/api/breeds/image/random');
if (!response.ok) throw Error(response.status + ': ' + response.statusText);
const data = await response.json();
this.setState({ dogs: data })
} catch(error) {
console.log('Fetch API error: ' + error);
}
}) ();
}
render() {
return (
<div>
<StyledTitle />
<ol>
{this.state.dogs.map(dog => <StyledDog key={dog.id} link={dog.message}/>)}
</ol>
</div>
);
}
}
const Title = ({ className }) => {
return (
<div className={ className }>
<h1>Pictures of Dogs</h1>
<h3>Greg Paul Simmons</h3>
</div>
);
}
const Dog = ({className, message}) => {
return <img src={message} alt="Picture of dog"/>
}
const StyledTitle = styled(Title)`
font-size: 50pt;
font-family: sans-serif;
color: #FFF;
background: #e3d8aa;`;
const StyledDog = styled(Dog)`
font-family: "Arial", sans-serif;`;
ReactDOM.render(
<AppClassStateful/>,
document.getElementById('container')
);
</script>
</body>
</html>
如果有人能指出我正确的方向,我将不胜感激。在这一点上,我完全被卡住了。
谢谢
【问题讨论】:
-
似乎dog.ceo/api/breeds/image/random 产生了一条狗(您可以导航到 URL)。您期待多个吗?
标签: javascript html reactjs state