javascript - 处理 render() 函数中 componentDidMount() 中定义的变量
问题描述
我在 react 中遇到了 componentDidMount() 和 render() 的问题。
在我的componentDidMount()
情况下,我正在进行 ajax 调用以从服务器(express+mysql)获取数据,并将这些数据设置在我的状态变量中dashboardData
componentDidMount() {
const headers = { 'Authorization': localStorage.getItem('authToken') }
axios.get('http://localhost:3001/getDashboardData', {headers})
.then(res => {
this.setState({
dashboardData: res.data.data
})
})
}
在我的render()
我正在做这样的事情
const data = this.state.dashboardData
const chartData = data.map(function(record) {
return {
labels: [record.Received, record.Approved, record.Pending],
datasets: [{
data: [300, 50, 100],
backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56'],
hoverBackgroundColor: ['#FF6384', '#36A2EB', '#FFCE56']
}]
}
})
const chart = <Doughnut data={chartData} width={100} height={100} />
但是在这里我收到chartData not defined
错误,这可能是因为在我的第一次渲染期间未定义 chartData,因为没有dashboardData 状态变量。如何处理这个。
constructor(props) {
super(props)
this.state = {
dashboardData:[]
}
}
解决方案
传递一个空数组来处理初始渲染
const data = this.state.dashboardData || [];
if(data.length == 0){
return <div>No data available</div>;
}
const chartData = data.map(function(record) {
return {
labels: [record.Received, record.Approved, record.Pending],
datasets: [{
data: [300, 50, 100],
backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56'],
hoverBackgroundColor: ['#FF6384', '#36A2EB', '#FFCE56']
}]
}
})
const chart = <Doughnut data={chartData} width={100} height={100} />
推荐阅读
- ruby-on-rails - WordPress 上的搜索表单在 rails 应用程序上显示结果
- android - 无法在 Android 中为 flutter_downloader 打开下载的文件
- c# - 协商后不检查 WebSocket 连接的访问令牌
- flutter - 使用 Flutter 在谷歌地图上绘制圆弧
- java - 用于对象检测的带有 model.tflite 的 Android 应用
- python - 丢弃 TCP 数据包的 Python 函数 - OpenFlow
- c++ - 从 C++ 类转换函数指针以在 C 中使用它
- vue.js - Vue 可拖动、嵌套和组
- encryption - Dukpt AES-192 和 AES-256 派生密钥计算
- java - 使用 Spring / Hibernate / Postgres 处理事务超时导致的异常