首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJS:表单onSubmit未能调用回调

ReactJS:表单onSubmit未能调用回调
EN

Stack Overflow用户
提问于 2019-09-10 04:02:01
回答 1查看 1.1K关注 0票数 1

下面是一个关于YouTube的聊天教程,如下所示:

https://www.youtube.com/watch?v=6vcIW0CO07k

在3-4分钟的时间内,本教程开始添加onChangeonSubmit事件处理程序。

此时,我应该能够单击按钮,并打开一个带有输入值的警报窗口。

下面是UsernameForm.js文件的内容:

代码语言:javascript
复制
import React from 'react'

class UsernameForm extends React.Component {
constructor(props) {
    super(props)
    this.state = {
        username: ''
    }

    this.onChange = this.onChange.bind(this)
    this.onSubmit = this.onSubmit.bind(this)
}

onChange(e) {
    this.setState({
        username: e.target.value,
    })
}

onSubmit(e) {
    e.preventDefault()
    this.props.onSubmit(this.state.username)
}

render () {
    return <div>
        <form>
            <input 
                type="text" 
                placeholder="What is your username?" 
                onChange={this.onChange} 
            />
            <input type="submit" />
        </form>
    </div>
  }
}

export default UsernameForm;

在Apps.js文件中:

代码语言:javascript
复制
import React, { Component } from 'react'
import UsernameForm from './components/UsernameForm'

class App extends Component {
  render() {
    return <UsernameForm onSubmit={username => alert(username)} />
  }
}

export default App

编译是成功的,但没有警报窗口。这一页刚刚刷新。

有人知道为什么警报窗口没有开火吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 04:06:08

您添加的onSubmit回调支柱需要由form元素本身调用。您可以通过将onSubmit={this.onSubmit}添加到UsernameForm中的<form />中来实现这一点。

代码语言:javascript
复制
render () {
    return <div>
        {/* form has onSubmit callback prop which is invoked when the
        form itself is submit. Wire your components onSubmit (ie 
        this.onSubmit) to the form's callback to solve the problem */}
        <form onSubmit={this.onSubmit}> 
            <input 
                type="text" 
                placeholder="What is your username?" 
                onChange={this.onChange} 
            />
            <input type="submit" />
        </form>
    </div>
  }
}

this.onSubmit传递给表单的onSubmit回调支柱会导致调用您定义的onSubmit()方法,这反过来又会导致调用传递给UsernameForm (也就是您的警报所在)的回调。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57863888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档