Reactjs - 无法读取未定义的 属性

Reactjs - Cannot read the property of undefined

我正在尝试使用条件渲染来渲染 class 组件。 class 组件的状态值默认设置为 false。在 class 中,一个名为 start() 的函数执行一些操作,并根据结果调用具有 setState() 的函数 verifyTheIdentity()。但是我无法从 start().

调用 verifyTheIdentity()
import React from "react";
import * as faceapi from "face-api.js";
import web3 from "../web3";

class recognize extends React.Component {
  constructor(props) {
    super();
    this.state = {
      verified: false
    }
    this.verifyTheIdentity = this.verifyTheIdentity.bind(this);
    // this.start = this.start.bind(this);
  }
  verifyTheIdentity() {
    this.setState(prevState => {
      return {
        verified: true
      }
    })
  }
  async start() {
    ///////////////////CODE FOR FACE RECOGNITION///////////////////////////////
    let name = result.toString();
    console.log(name);
    const pattern = new RegExp(/^unknown/)
    console.log(pattern.test(name))
    if (pattern.test(name) === false) {
      document.getElementById("verifier").disabled = false;
      document.getElementById("verifier").onClick = this.verifyTheIdentity;    //This is where I am going wrong.
    }
    else
      document.getElementById("verifier").disabled = true;

  })
})
    }
render() {
  return (
    <div>
      {this.state.verified == false ? <div><br /><br /><br /><br />
        <input type="file" id="imageUpload" /><br />
        <button disabled id="verifier" >Verify</button></div> :
        <div><br /><br /><br /><br /><p>Verified</p></div>}
    </div>

  )
}
}
export default recognize;

这是我得到的错误。

Unhandled Rejection (TypeError): Cannot read property
'verifyTheIdentity' of undefined.

首先,如果你使用箭头函数,你根本不需要绑定。

    constructor(props) {
        super();
        this.state = {
            verified: false 
        }
    }
    verifyTheIdentity = () => {
        //code
    }   
    start = async () => {
       // code 
    }

试试这个,它应该有效。

或 删除注释代码, 添加构造函数(从行中删除 //)

this.start = this.start.bind(this);

你可以用下面一行替换这一行

document.getElementById("verifier").onClick = this.verifyTheIdentity;

像这样

 document.getElementById("verifier").onClick = this.verifyTheIdentity();

此问题与 Javascript 语法违规 -

有关

"Calling a function without parenthesis"

要解决此问题,请使用正确的语法调用函数 verifyTheIdentity()

document.getElementById("verifier").onClick = this.verifyTheIdentity(); 

或者,将函数分配给变量并调用它:

const test = verifyTheIdentity() {
        this.setState(prevState => {
            return {
                verified: true
            }
        }) 
    };
document.getElementById("verifier").onClick = this.test ; 

为了便于理解,请看示例:

function Test(){
   alert(1);
}  

//Test;    //It won't work
Test();  // It will work