You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React应用导入Excel指定列展示:react-excel-renderer报错求助

问题修复方案

你遇到的报错是类组件state使用不规范导致的,以下是具体修复点和完整可运行代码:

  • 未初始化组件state:类组件在使用this.state前必须在constructor中声明初始值,初始渲染时你没有定义state,直接访问this.state.rows会触发空指针报错
  • 冗余的bind绑定:你已经用箭头函数定义了fileHandler,箭头函数会自动绑定当前组件实例,onChange中无需额外加.bind(this)
  • 缺少渲染判断:用户未上传Excel时rows和cols为空,直接传给OutTable会触发组件内部参数校验报错,需要加条件渲染逻辑
import React, { Component } from "react";
import {OutTable, ExcelRenderer} from 'react-excel-renderer';

class ConvertToJson extends Component {
  // 新增constructor初始化state
  constructor(props) {
    super(props);
    this.state = {
      cols: null,
      rows: null
    }
  }

  fileHandler = (event) => {
    let fileObj = event.target.files[0];
    // 额外新增文件类型校验,避免非Excel文件传入报错
    if (!fileObj.name.match(/\.(xls|xlsx)$/)) {
      alert('请上传.xls/.xlsx格式的Excel文件');
      return;
    }
    ExcelRenderer(fileObj, (err, resp) => {
      if(err){
        console.log(err);
      }
      else{
        this.setState({
          cols: resp.cols,
          rows: resp.rows
        });
      }
    });
  }

  render() {
    return (
      <div>
        <input type="file" onChange={this.fileHandler} style={{"padding":"10px"}} />
        {/* 新增条件判断,有数据才渲染表格 */}
        {this.state.rows && this.state.cols && (
          <OutTable 
            data={this.state.rows} 
            columns={this.state.cols} 
            tableClassName="ExcelTable2007" 
            tableHeaderRowClass="heading" 
          />
        )}
      </div>
    );
  }
}

export default ConvertToJson;

内容的提问来源于stack exchange,提问作者Jennifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:54:03