开发者问题收集

TypeError:无法读取未定义的属性(读取‘setState’)

2021-10-23
12198

我在尝试什么?

尝试在状态下设置输入类型文本的值

到目前为止我搜索了什么?

React - 未捕获的 TypeError:无法读取未定义的属性“setState”

但这并不能回答我的问题

错误详情

TypeError: Cannot read properties of undefined (reading 'setState')

在函数 setEmailVal 中设置电子邮件的值时出现此错误

在此处输入图像描述

组件

import React from 'react';

class Login extends React.Component {
    constructor(props) {
        super(props);
        this.state = {email: ""};
    }

    setEmailVal(val) {
        this.setState({email: val.currentTarget.value});
    }

    render() {
        return (
            <input type="text" onChange={this.setEmailVal} value={this.state.email} />
        );
    }    
}

export default Login;
2个回答

如果您以以下方式声明您的函数

setEmailVal = val => {
        this.setState({email: val.currentTarget.value});
    }

它可以正常工作。

如果您希望以其他方式(如果我没记错的话,是旧的)执行此操作,那么您需要将函数绑定到子组件的类,即类中的 onChange 处理程序以“看到”它:

constructor(props) {
        super(props);
        this.state = {email: ""};
        this.setEmailVal = this.setEmailVal.bind(this);
    }

最后,您可以在返回组件内部进行直接绑定

return (
            <input type="text" onChange={this.setEmailVal.bind(this)} value={this.state.email} />
        );
foreverAnIntern
2021-10-23

您可以通过将 setEmailVal 更改为箭头函数来修复此问题。
应该看起来像这样:

setEmailVal = e => {
   this.setState({email: e.currentTarget.value});
}

查看 这个 以获取有关此主题的更多信息。

tomleb
2021-10-23