【发布时间】:2020-10-05 09:36:22
【问题描述】:
我无法完全理解这一点。
我必须传递异步获取的数据。问题是,道具也是异步的。这是该组件的简化版本:
import React, { Component } from 'react'
import CSVLink from 'react-csv'
import generateData from './customApi/generateData
type Props = { job?: JobType | undefined }
type State = { csvData: string[][] }
class MyComponent extends Component<Props, State> {
state = {
csvData = [],
}
generateCsv = async (jobId: string) => {
const csvData = await generateData(jobId)
this.setState({ csvData })
}
async componentDidMount() {
const { job } = this.props
await this.generateCsv(job.id)
}
render() {
const { csvData } = this.state
return (
<CSVLink data={csvData}>
<p>Download csv</p>
</CSVLink>
)
}
}
export default connectFirestore(
(db, params) => ({ getJob(db, params.id) })
)
基本上,我的道具是从对 firestore 的 API 调用中获取的,因此加载作业需要一段时间。问题是,当我尝试在async componentDidMount() 中传递jobId 时,它最终会传递undefined,因为尚未加载job props。
我没有将整个传递状态链接到正在进行的异步调用业务,但我想不出任何其他方式,我如何将 csvData 从 generateDate() 异步调用仅传递一次 @987654329 @ 已解决。
我想解决这个问题的最简单方法是,可能以某种方式检查componentDidMount() 中的道具是否已经被获取?
解决这个问题的正确方法是什么?
【问题讨论】:
标签: javascript reactjs typescript asynchronous react-lifecycle