reactjs - ReactJS错误TypeError:无法读取未定义的属性“地图”
问题描述
我正在尝试使用fetch使用 JSON API ;上面提到的错误出现在以下行:**this.state.data.map( (dynamicData,key)=>**
这是我的 ReactJS 代码,错误行以粗体显示:
import React, { Component } from 'react';
import './App.css';
class App extends Component {
//constructor
constructor() {
super();
this.state = {
data: [],
}
} //end constructor
componentDidMount(){
return fetch('https://jsonplaceholder.typicode.com/todos')
.then((response)=>response.json())
.then((responseJson)=>
{
this.setState({
data:responseJson.todos
})
console.log(this.state.data)
})
} // end component did mount
render() {
return (
<div>
<h2>Todo:</h2>
<div>
{
**this.state.data.map( (dynamicData,key)=>**
<div>
<span> {dynamicData.userId} </span>
<span> {dynamicData.id} </span>
</div>
)
}
</div>
</div>
);
}
}
export default App;
关于我做错了什么,我能得到一些帮助吗?提前致谢
解决方案
import React, { Component } from "react";
import { render } from "react-dom";
class App extends Component {
state = {
data:[],
url: "https://jsonplaceholder.typicode.com/todos"
};
componentDidMount() {
fetch(this.state.url)
.then(response => response.json())
.then(data => this.setState({ data }));
}
render() {
const { data } = this.state;
data && console.log(data);
return (
<div>
{data &&
data.map(item => <div> Hello User With Id: {item.userId} </div>)}
</div>
);
}
}
render(<App />, document.getElementById("root"));
你的 didMount 也应该和我的一样, setState 需要一个回调,所以如果你想看看数据是什么样的,它会是这样的
this.setState({ data }, () => console.log(this.state.data))
在您的渲染中,您似乎忘记了地图中箭头函数之后的括号。
render() {
return (
<div>
<h2>Todo:</h2>
<div>
{
this.state.data.map((dynamicData,key)=> (
<div>
<span> {dynamicData.userId} </span>
<span> {dynamicData.id} </span>
</div>
))
}
</div>
</div>
);
}
推荐阅读
- flutter - Flutter:是否可以不按按钮自动切换屏幕?
- python - Python git项目结构约定?
- javascript - 为什么 index.bindClient 不是函数?
- r - 如何使用反距离加权误差进行 R 空间插值
- global - 将全局 P 值添加到逻辑回归和 cox 比例风险模型 - 使用哪些测试?是沃尔德测试吗?
- json - 使用 Json 自定义序列化
- node.js - 您如何指定模拟 AWS Lambda 背后的代码
- javascript - 服务器之间的 Express.js CORS
- c# - 如何通知所有窗口静态属性已更改?
- css - 如何设置 MatSelect 样式以使其在所选元素上打开?