TypeError:无法读取未定义的属性“目标”

时间:2019-04-17 05:27:49

标签: excel reactjs

我正在尝试使用以下功能读取Excel数据文件:

handleFiles = (f, evt) => {

    var name = f.name;
    const reader = new FileReader();
    reader.onload = evt => {

      /* Parse data */
      const bstr = evt.target.result;

      const wb = XLSX.read(bstr, { type: "binary" });
      console.log("data>>>", wb);
      /* Get first worksheet */
      const wsname = wb.SheetNames[0];
      const ws = wb.Sheets[wsname];
      /* Convert array of arrays */
      const data = XLSX.utils.sheet_to_csv(ws, { header: 1 });
      /* Update state */
      console.log("Data>>>", data);
    };

    reader.readAsBinaryString(evt.target.files[0]);
  };

然后使用按钮调用功能:

  <Button onClick={this.handleFiles}>UPLOAD</Button>

调用该函数时,错误显示为“ TypeError:无法读取未定义的属性'target'”。有什么解决方案可以纠正此错误?

2 个答案:

答案 0 :(得分:0)

您的代码

 <Button onClick={this.handleFiles}>UPLOAD</Button>

替换为该代码

<Button onClick={(e)=>this.handleFiles(e)}>UPLOAD</Button>

答案 1 :(得分:0)

当您未将参数明确传递给事件处理程序时,即用作

<Button onClick={this.handleFiles}>UPLOAD</Button>

传递给事件处理程序handleFiles的第一个参数是事件对象。

所以在上面的代码中

handleFiles = (f, evt) => {...}

实际事件对象是f

由于尚未将第二个evt参数显式传递给事件处理程序handleFiles。因此是undefined,尝试访问target的属性undefined会导致错误。

  

TypeError:无法读取未定义的属性“ target”

因此,要解决此问题,可以显式传递参数。

<Button onClick={(evt) => this.handleFiles('someArgument', evt)}>UPLOAD</Button>