当前位置: 首页 > 面试题库 >

React:事件处理程序中为null

谭泳
2023-03-14
问题内容

我有一个LoginForm组件。我要检查之前提交,这两个loginNamepassword设置。我尝试使用此代码(省略了很多内容):

class LoginForm extends Component {

  constructor() {
    super();

    this.state = {
      error: "",

      loginName: "",
      password: "",
      remember: true
    };
  }


  submit(e) {
    e.preventDefault();
    if(!this.state.loginName || !this.state.password) { //this is null
      this.setState({ error: "Fill in both fields" });
    } else {
      console.log("submitting form");
    }
  }

  render() {
    return (
      <div className="col-xs-12 col-sm-6 col-md-4">
        <form className="login" onSubmit={this.submit}>
          <button type="submit" className="btn btn-default">Sign in</button>
        </form>
      </div>
    );
  }
}

export default LoginForm;

但是,我TypeError在事件处理程序中得到一个,说this是空的。

我该怎么办?


问题答案:

你需要设置thissubmit方法,因为现在thisundefined,对于此操作,您可以使用.bind

onSubmit={ this.submit.bind(this) }

Example

或者您可以使用箭头功能

onSubmit={ (e) => this.submit(e) }

Example



 类似资料:
  • 问题内容: 由于某些原因,此值在反应事件处理程序中丢失。阅读我认为有反应的文档在这里做了一些工作,以确保将其设置为正确的值 以下内容不符合我的预期 但这确实是: React和ES6对我来说是新手,但这似乎不是正确的行为? 问题答案: 如果使用新语法,这对于JavaScript和React是正确的行为。 自动绑定功能不适用于 v0.13.0中的ES6类。 因此,您需要使用: 或其他技巧之一:

  • 主要内容:实例,向事件处理程序传递参数React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同: React 事件绑定属性的命名采用驼峰式写法,而不是小写。 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM 元素的写法) HTML 通常写法是: React 中写法为: 在 React 中另一个不同是你不能使用返回 false 的方式阻止默认行为, 你必须明确使用 preventDefa

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 我在主页组件中有这个代码,当按下向下/向上箭头键时,什么也没有发生。我刚刚意识到,当用ctrl键按箭头键时,eventhandler可以正常工作。我到处找,但什么也没找到。有人能帮忙吗?我的浏览器是Chrome v.96。React版本17.0.2,节点v.16.13.1

  • 我试图理解在Azure Function v2函数中使用EventGridTrigger时EventGrid的行为。此页面(在MS官方文档中)详细说明了与事件处理程序返回的状态代码相关的特定行为,但没有具体说明正在使用什么类型的事件处理程序。基于状态代码的使用,我只能假设它是用于webhook的。但是,Azure门户中的订阅配置具有Azure功能的事件处理程序。使用此事件处理程序时,如何从azur