javascript - ReactJS 表单提交 preventdefault 不起作用

标签 javascript reactjs

我正在学习 React JS,同时正在学习在线教程。下面的代码停止工作并给我一个异常“TypeError:无法读取未定义的属性'PreventDefault'”。有人可以帮我理解造成这种情况的原因吗?提前致谢。

const Card = (props)=>{
  return(
        <div style={{margin:'1em'}}>
          <img width ="75" src ={props.avatar_url}/>
          <div style={{display: 'inline-block', marginLeft: 10}}>
             <div style ={{fontSize:'1.25em', fontWeight: 'bold'}}>
               {props.name}
             </div>
             <div>{props.company}</div>
          </div>
        </div>
       );
};

const CardList = (props) => {
    return (
            <div>
                {props.cards.map(card => <Card {...card} />)}
             </div>
           );
       }

class Form extends React.Component {

  handleSubmit = (e) => {
        e.PreventDefault();
        console.log('Event: Form Submit');
  };

  render() {
        return (
        <form onSubmit={this.handleSubmit()}>
        <input type ="text" placeholder ="Github username"/>
        <button type ="submit">Add Card</button>
      </form>
    );
  }
}

class App extends React.Component {

state = {
    cards:  [
        {       name : "Paul O’Shannessy" , avatar_url: "https://avatars1.githubusercontent.com/u/8445?v=4", company: "Facebook"  },
        {       name : "Ben Alpert" , avatar_url: "https://avatars1.githubusercontent.com/u/6820?v=4",company: "Facebook"  },
      ]
}

  render() {
        return(
            <div>
              <Form />
              <CardList cards={this.state.cards} />
            </div>
        );
  }
}

ReactDOM.render(<App />,mountNode)

最佳答案

这里有两个小问题。第一个,它不是 PreventDefault,而是 preventDefault。然后在这里:

<form onSubmit={this.handleSubmit()}>

您不是在使用回调函数,而是在调用真正的函数。如果不使用回调,则无法获取 e。此外,如果您像上面那样使用它,它会在第一次渲染时触发,但不会在提交时再次触发。

<form onSubmit={() => this.handleSubmit()}>

但是,您不需要也不应该这样使用它。如果你像这样使用它,回调函数将在每次渲染时重新创建。只需使用函数的引用。你也可以用这个得到 e

<form onSubmit={this.handleSubmit}>

最后一件事,为您的Card map 使用

{props.cards.map( card => <Card key={card.name} {...card} /> )}

哦,也许还有最后一件事 :) 如果您目前不使用 linter,请使用它。

关于javascript - ReactJS 表单提交 preventdefault 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52321664/

相关文章:

javascript - 类型 'number[]' 缺少类型 '[number, number, number, number]' 的以下属性 : 0, 1、2、3

reactjs - 为什么在条形图中不显示 Y 轴,也不显示图表中 X 轴的所有标签?

javascript - node.js express,一个非常奇怪的行为

javascript - jQuery Promise 不会触发 .then() 或 .done()

javascript - 使用 jQuery 插件或 Javascript 为文件夹中的每个图像创建一个 <li>

java - 代码中的变量范围

reactjs - react native 组件生命周期方法不会在导航时触发

javascript - 如何最好地从原生 JavaScript 对象继承? (尤其是字符串)

javascript - 如何允许渲染的reactjs组件中的输入更改?我要提升状态吗?

javascript - 从 JSON 创建动态 Yup 验证模式