0

我有一段代码,

this.setState({ generateGraphTableforPDF: true }, () => {
 this.generatePDFData(true);
 this.setState({ generateGraphTableforPDF: false });
});

此 setstate 回调在渲染完成之前执行,因此在 dom 中没有表,因此会生成空的 pdf。

我试图删除回调函数并将它们写入 componentDidUpdate 并设置超时 0。但问题是这在某些情况下也失败了。

4

2 回答 2

0

你可以这样做,

this.setState({ generateGraphTableforPDF: true }, () => {
   this.generatePDFData(true);
});

function generatePDFData(bool){
   //Your logic to generate PDF
   this.setState({ generateGraphTableforPDF: false });
}
于 2019-07-03T04:18:39.850 回答
0

在您的代码中,回调函数内部的逻辑不会同步运行。this.generatePDFData(true)执行前未完成this.setState({ generateGraphTableforPDF: false })

您的逻辑流程应该看起来像这样,因此所有过程都在执行下一步之前完成:

handleChangeOrWhateverFunction = () => {
    this.setState({
       generateGraphTableforPDF: true
    })
}

componentDidUpdate(prevProps, prevState){
   if(this.state.generateGraphTableforPDF && prevState.generateGraphTableforPDF !== this.state.generateGraphTableforPDF){
       this.generatePDFData(true)
   }
}

generatePDFData = (boolean) => {
...pdf generating logic
   this.setState({
      generateGraphTableforPDF: false
   })
}
于 2019-07-03T04:06:18.653 回答