javascript - API函数调用在反应组件中不起作用
问题描述
我从 API 获取数据的功能不起作用
import React, { Component } from 'react'
class Contact extends Component{
constructor(){
super()
this.state = {
data: []
}
this.fetchData = this.fetchData.bind(this)
}
fetchData(){
let base_url = 'https://jsonplaceholder.typicode.com/photos/'
fetch(base_url, {method:"GET"})
.then(response => response.json())
.then(json => {
this.setState({
data:json
})
})
console.log(this.state.data)
}
render(){
return(
<div>
<h1>Contact page{this.state.data.title}</h1>
</div>
)
}
}
export default Contact
解决方案
首先,您没有在fetchData
任何地方调用该函数。componentDidMount
在方法中调用它
其次,数据应该是一个数组,所以this.state.data.title
会抛出错误
最后状态更新会反映在下一个渲染周期中,因此日志console.log(this.state.data)
不会显示更新的数据
class Contact extends React.Component{
constructor(){
super()
this.state = {
data: []
}
this.fetchData = this.fetchData.bind(this)
}
componentDidMount() {
this.fetchData();
}
fetchData(){
let base_url = 'https://jsonplaceholder.typicode.com/photos/'
fetch(base_url, {method:"GET"})
.then(response => response.json())
.then(json => {
this.setState({
data:json
})
})
}
render(){
return(
<div>
<h1>Contact page</h1>
{this.state.data.map(photo => <div>{photo.title}</div>)}
</div>
)
}
}
ReactDOM.render(<Contact/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"/>
推荐阅读
- javascript - 在 Safari 中打开 iOS 上的新标签页
- log4j2 - Log4j2 异步记录器
- ios - 使用 react-native-fcm 时不在 ios 设备中显示通知
- python - 具有容差的 NumPy setdiff1d - 将 numpy 数组与另一个数组进行比较并仅保存唯一值 - 在容差之外
- python - Postgresql 类型 bytea 不在 html 中显示文本
- angular - 如何对对象使用角度选择
- sonata-admin - Sonata 管理员 configureFormFields 添加操作
- apache-kafka - 简短的 Kafka 分区描述(我很困惑)
- powerapps - 将画廊项目与字符串进行比较
- wordpress - 完成更新 wordpress 时出现错误