【问题标题】:this.setState is not a function for a File Upload ReactJSthis.setState 不是文件上传 ReactJS 的函数
【发布时间】:2020-02-10 11:43:33
【问题描述】:

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

我有一个非常基本的类组件,它只是加载一个外部 HTML 文件并读取其内容,但是由于某种原因,我得到 this.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


    【解决方案1】:

    存在范围问题,您可以尝试此代码。或者你可以bind这个函数。

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

    【讨论】:

      【解决方案2】:

      您可以尝试使用以下方法更改您的 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 类中

      【讨论】:

        猜你喜欢
        • 2017-07-17
        • 2020-09-08
        • 2015-05-01
        • 2018-12-11
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        相关资源
        最近更新 更多