如何将表单事件传递给父组件以防止默认?

时间:2016-05-31 08:32:29

标签: javascript forms reactjs

我有一个非常标准的形式:

export default class Form extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      email: '',
      refCode: ''
    }
    this.onSubmit = this.onSubmit.bind(this)
    this.changeEmail = this.changeEmail.bind(this)
  }

  changeEmail (event) {
    this.setState({ email: event.target.value })
  }

  onSubmit () {
    this.props.onSubmit(this.state)
  }

  render () {
    return (
      <div>
        <h2>{this.props.title}</h2>
        <form className={cx('Form')} onSubmit={this.onSubmit}>
          <input
            className={cx('Form-email')}
            onChange={this.changeEmail}
            value={this.state.email}
            type='email'
            placeholder='email' />
          <input className={cx('Form-refcode')} type='text' placeholder='enter referal code' />
          <input className={cx('Form-btn')} type='submit' value='sign up' />
        </form>
      </div>
    )
  }
}

然后,我希望通过此函数

处理父组件中的表单提交
submitForm (value) {
  event.preventDefault()
  console.log(value.email)
}

/* ... */

<Form
  title='What are you waiting for?! Sign up now'
  onSubmit={this.submitForm} />

我遇到的问题是event.preventDefault()无效,似乎我没有通过控制台记录正确的值。

我认为我没有正确地传递或接收值,但我不知道我哪里出错了。

1 个答案:

答案 0 :(得分:0)

在子组件传递event(您可以根据需要命名)从父组件方法的方法

onSubmit (event) {
  this.props.onSubmit(event, this.state)
}

在父组件中这样做

submitForm (event, value) {
  event.preventDefault()
  console.log(value.email)
}