javascript - ReactJS event.preventDefault();不是一个函数

标签 javascript reactjs

我试图提交表单数据,我的主要要求是整个页面不应在表单提交时重新加载。因此我尝试添加 event.preventDefault();在我的表单提交函数中,但它给了我一个错误。

我尝试了其他各种 stackoverflow 答案中提到的各种解决方案,但没有一个起作用。

constructor(props){
    super(props);
    this.state = {
        rating:5,
        review:"",
        user:""
    }
    this.handleSubmit = this.handleSubmit.bind(this);
}

async handleChange(event) {
    const name = event.target.name;
    //console.log(name);
    this.setState({ [name]: event.target.value})
    //console.log(this.state);
  }

  handleSubmit(event,type,id) {
    const data = new FormData(event.target);
    alert(event);
    console.log("event",event);
    event.preventDefault();
    data.append("type",type)
    fetch('http://localhost:10000/movie/addreview/'+id, {
      method: 'POST',
      body: data,
    });
  }

下面是我的表格

<form onSubmit={this.handleSubmit(this,type,id)} target="#">
                <div className="ratingfield">
                    <h1 className="ratingtext">Enter Username </h1> 
                    <input name="user"  onChange={this.handleChange.bind(this)} value={this.state.user} className="input" size="10"></input> 
                     </div>

                     <br/>
                <br/>
                <div className="ratingfield">
                    <h1 className="ratingtext">Enter Rating from 1-10</h1> 
                    <input name="rating"  onChange={this.handleChange.bind(this)} value={this.state.rating} className="input" size="4"></input> 
                     </div>

                <br/>
                <br/>

                <center><h1 className="new"> Enter Review</h1></center>
                <center><textarea name="review" onChange={this.handleChange.bind(this)} className="message" rows="10" cols="50"></textarea></center>
                <center><input type="submit" className="sbtbtn"></input></center>
  </form>

任何解决方案都会非常有帮助。

最佳答案

您可能应该阅读有关事件处理程序的更多信息 here

您在渲染阶段调用处理程序,而不是作为callback传递给事件,并且由于您的处理程序不返回任何内容,因此该事件将不会收到任何内容。

试试这个

handleSubmit(type, id, event){
  // insert your logic here
}

render() {
  return ( 
     <form onSubmit={this.handleSubmit.bind(this,type,id)} target="#">
       /* JSX goes here */
     </form>
)}

bind 函数将参数和范围绑定(bind)到您的回调(处理程序handleSubmit)。

传递给 bind 函数的参数将位于 React 内部传递给处理程序的参数之前

this 指的是函数被调用后的作用域。这允许您调用 this.setState 因为 this 是由组件类绑定(bind)的

关于javascript - ReactJS event.preventDefault();不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59442793/

相关文章:

Javascript频率计数器算法

Javascript 正则表达式替换 "split"

reactjs - 类型错误 : Cannot read property 'webpackJsonp' of undefined

reactjs - React Hook useReducer 总是运行两次

javascript - 下面的语句在js中起什么作用

javascript - 如何有效地使这个 Google Apps 脚本循环?

javascript - 如何从数组中排除某些键

javascript - 获取事件标签项的元素以显示边界线

javascript - 在不使用服务器的情况下在 HTML 页面中使用 XML

reactjs - 我对传递给在容器内使用重新选择的选择器函数的参数感到困惑