Javascript TypeError:无法读取react js中未定义的属性'preventDefault'

Javascript TypeError:无法读取react js中未定义的属性'preventDefault',javascript,reactjs,Javascript,Reactjs,我对react和js都是新手,我正在学习一门关于react的速成课程。我在课程的某个时候遇到了这个错误 当我打开chrome时,即使在控制台上显示编译成功,我也会在chrome上看到这个错误。 我环顾了一下网站上的其他话题,但没有人回答我的问题 这是有关的两个文件 AddTodo.js export class AddTodo extends Component { onSubmit = (e) => { e.preventDefault(); this

我对react和js都是新手,我正在学习一门关于react的速成课程。我在课程的某个时候遇到了这个错误 当我打开chrome时,即使在控制台上显示编译成功,我也会在chrome上看到这个错误。 我环顾了一下网站上的其他话题,但没有人回答我的问题

这是有关的两个文件

AddTodo.js

export class AddTodo extends Component {  
    onSubmit = (e) => {
      e.preventDefault();
      this.props.addTodo(this.state.title);
      this.setState({ title: '' });
    }
  render() {
    return (
      <form  style = {{display:'flex'}} onSubmit={this.onSubmit()} >
          <input type="text" name='title' style = {{flex:'10' , padding:'5px'}} placeHolder="Ajouter une Tâche..." value={this.state.value} onChange={this.onChange}/> 
          <input type = "submit" value="Ajouter" className="btn" style = {{flex:'1'}} />
      </form>
    )}
App.js

addTodo = (title) => {const newTodo = {id : 5,title,completed : false,}
render() {
return (
  <div className="App">
    <div className="container">
      <Header />
      <AddTodo addTodo ={this.addTodo}/>
      <Todos todos={this.state.todos} markComplete={this.markComplete} delTodo={this.delTodo} />
    </div>
  </div>
);
}

将onSubmit={this.onSubmit}替换为onSubmit={this.onSubmit},否则无法访问e参数

将onSubmit={this.onSubmit}替换为onSubmit={this.onSubmit},否则无法访问e参数


在onSubmit上分配函数时出现问题:


根据您的代码onSubmit={this.onSubmit},它不会赋值,而是在提交时使用render本身执行代码。

在onSubmit上赋值函数时出现问题:


根据您的代码onSubmit={this.onSubmit},它不会赋值,而是使用render本身执行代码,而不是在提交时执行代码。

您正在立即执行函数:

这意味着两件事:

没有向其传递事件参数,因此出现错误。 函数的结果被用作提交处理程序,该处理程序也未定义。 不执行函数,只是将函数本身作为引用传递给系统,以便在提交表单时执行:


您正在立即执行该函数:

这意味着两件事:

没有向其传递事件参数,因此出现错误。 函数的结果被用作提交处理程序,该处理程序也未定义。 不执行函数,只是将函数本身作为引用传递给系统,以便在提交表单时执行:

<form  style = {{display:'flex'}} onSubmit={this.onSubmit} >
   <input type="text" name='title' style = {{flex:'10' , padding:'5px'}} placeHolder="Ajouter une Tâche..." value={this.state.value} onChange={this.onChange}/> 
   <input type = "submit" value="Ajouter" className="btn" style = {{flex:'1'}} />        
</form>
 <form  style = {{display:'flex'}} onSubmit={this.onSubmit} >
onSubmit={this.onSubmit()}
onSubmit={this.onSubmit}