javascript - 如何从 React 中 render 方法之外的函数渲染组件?

标签 javascript reactjs csv dom

我有一个 React 类,我在其中使用一个名为 React CSV 的插件它将值数组转换为 CSV 并开始在浏览器中下载新创建的 CSV 文件。

当单击“导出”按钮时,我调用一个函数。该函数位于渲染函数之外(尽管是相同的 React 类)。该组件在渲染后立即触发 CSV 文件的下载。

我的按钮组件,在 render() 方法内:

    <Button 
        variant="contained" 
        color="secondary"
        onClick={this.exportCSV.bind(this)}
    >
      Export
    </Button>

我的exportCSV函数在渲染方法之前定义如下:

      exportCSV(){
    const csvMergedData = this.props.dataA.map((value, index) 
      => ({
            columnA: value,
            columnB: this.props.dataB[index]
    }));
   return (<CSVDownload data={csvMergedData} /> );

}

问题是,CSVDownload 组件未安装/渲染,因此未下载 CSV 文件。

如何渲染组件?

PS:我已经浏览了其他答案,但找不到解决方案。

最佳答案

CSVDownload 组件未安装,因为从事件处理函数返回该组件不会呈现该组件。为了渲染组件,它需要位于 render 方法中。

我建议将 csvMergedData 放入组件的状态并将其初始化为 null:

class YourComponent extends React.Component {
    state = { csvMergedData: null };

然后在您的 exportCSV 函数中,您可以进行映射并将其保存在状态中:

exportCSV() {
    const csvMergedData = this.props.dataA.map((value, index) => ({
        columnA: value,
        columnB: this.props.dataB[index]
    }));
    this.setState({ csvMergedData });
}

最后,在渲染方法中,您可以根据状态有条件地渲染 CSVDownload 组件:

<Button 
    variant="contained" 
    color="secondary"
    onClick={this.exportCSV.bind(this)}
>
  Export
</Button>

{this.state.csvMergedData
    ? <CSVDownload data={this.state.csvMergedData} />
    : null
}

关于javascript - 如何从 React 中 render 方法之外的函数渲染组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51194712/

相关文章:

javascript - 如何根据 MVC 中的 DropDownList 选择刷新页面的一部分?

javascript - 传递给 Chart.js 的 PHP 字符串数据渲染不佳

javascript - Formik React 使用 2 个按钮(提交和保存)提交表单 - 保存按钮不触发验证

javascript - React.js、JavaScript 通过单击数组中的父元素获取 Img

java - 使用 filewriter 将 CSV 文件从 data.csv 重命名为 timestamp_data.csv

javascript - 关闭 React 应用程序中所有输入的自动完成功能

javascript - 过滤列表为空

reactjs - React-query 和 Typescript - 如何正确输入突变结果?

PHP - 导出 CSV 函数为每个条目重复标题

excel - 解析 CSV,忽略 VBA 中字符串文字内的逗号?