this.setState不是文件上传ReactJS的函数

问题描述 投票:1回答:2

我知道这个问题已经问过几次了,但是我遍历了答案,找不到解决我的问题的方法。

我有一个非常基本的类组件,它只是加载一个外部HTML文件并读取其内容,但是由于某种原因,我得到了这个。setState在加载实际的HTML之后就不是一个函数,而且我不知道为什么。

这是我的代码:-

import React from "react";

class ReadHtml extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            innerText: ''
        };
        this.handleFileSelect = this.handleFileSelect.bind(this);
      }


    handleFileSelect = (evt) => {
        evt.preventDefault();
        var file = evt.target.files[0]; // File inputs are an array - get the first element
        var reader = new FileReader();

        reader.onload = function(e) {
          // Render the supplied file
          document.getElementById('displayPage').innerHTML = e.target.result;
          this.setState({
              innerText: e.target.result
          });
        };

        // Read in the HTML file.
        reader.readAsText(file);
      };

    render() {
        return (
          <div>
            Select a file : <input type="file" onChange={(e) => this.handleFileSelect(e)} /><br/><br/>
            <div id="displayPage">Display the Html Page here</div>
          </div>
        )
      }

}

export default ReadHtml;

非常感谢您的帮助!

javascript reactjs
2个回答
2
投票

存在范围问题,您可以尝试以下代码。或者您可以bind该功能。

reader.onload = (e) =>{
      // Render the supplied file
      document.getElementById('displayPage').innerHTML = e.target.result;
      this.setState({
          innerText: e.target.result
      });
    };

1
投票

您可以尝试通过以下方式更改handleFileSelect功能:

    handleFileSelect = (evt) => {
        evt.preventDefault();
        var file = evt.target.files[0];
        var reader = new FileReader();

        reader.onload = (e) => { //CHANGES
          document.getElementById('displayPage').innerHTML = e.target.result;
          this.setState({
              innerText: e.target.result
          });
        };

        // Read in the HTML file.
        reader.readAsText(file);
      };

基本上,当您创建一个新函数时(这里是reader.onload = function()),this被绑定到该函数。使用箭头功能,this保留在您的React Class中

© www.soinside.com 2019 - 2024. All rights reserved.