简体   繁体   English

反应句柄表单提交

[英]React handle form submit

I'm trying to create a form in React/Redux. 我正在尝试在React / Redux中创建一个表单。 For now I just want the form to trigger my function handleSubmit when the form is submitted. 现在我只希望表单在提交表单时触发我的函数handleSubmit。 However at the moment it looks like the function is triggered instantly on page load ... 但是目前看起来该功能是在页面加载时立即触发的......

export default class AssetsAdd extends React.Component {

  componentDidMount() {
    console.log(this)
  }

  handleSubmit(event) {
    if (this.refs.titleInput !== '') {
      event.preventDefault();
      var asset = {
        date: '',
        title : this.refs.titleInput.value,
        id : '',
        type: this.refs.typeInput.value
      }

      return this.props.dispatch(addAsset(asset))
    }


  }

  render() {
    return (
      <div>
        <Row>
          <Portlet title='New Asset' form>
            <Form horizontal onSubmit={this.handleSubmit}>
              <FormGroup>
                <Label text='Title' size='3' />
                <Input ref="titleInput" placeholder='Enter asset title' size='4'/>
              </FormGroup>
              <FormGroup>
                <Label text='Type' size='3' />
                <Input ref="typeInput" placeholder='Enter asset type' size='4'/>
              </FormGroup>
              <FormGroup>
                <Label text='Description' size='3' />
                <Input ref="descriptionInput" placeholder='Enter asset description' size='4'/>
              </FormGroup>
              <FormGroup>
                <Label text='Documentation' size='3' />
                <Input ref="documentationInput" placeholder='Enter documentation URL' size='4'/>
              </FormGroup>
              <FormActionBar>
                <SubmitButton value='Submit'/>
                <CancelButton value='Cancel'/>
              </FormActionBar>
            </Form>
          </Portlet>
        </Row>
      </div>
    )
  }
}

function mapStateToProps(state) {
  return {
    assets: state.assets
  };
}

export const AssetAddContainer = connect(mapStateToProps)(AssetsAdd);

I know the rest of the code isn't all correct yet but my main concern now is just getting the onSubmit action triggered at the right moment. 我知道剩下的代码并不完全正确,但我现在主要担心的是在正确的时刻触发onSubmit操作。

Thanks in advance! 提前致谢!

Looks like you're not binding your handleSubmit . 看起来你没有绑定你的handleSubmit

From the docs : 来自文档

Methods follow the same semantics as regular ES6 classes, meaning that they don't automatically bind this to the instance. 方法遵循与常规ES6类相同的语义,这意味着它们不会自动将其绑定到实例。

You've got three options 你有三个选择

  1. Add a constructor and do the binding there (recommended): 添加一个构造函数并在那里进行绑定(推荐):

    this.handleSubmit = this.handleSubmit.bind(this);

  2. Bind directly: 直接绑定:

    onSubmit={this.handleSubmit.bind(this)}

  3. Use arrow => functions 使用arrow => functions

    onSubmit={() => this.handleSubmit}

You need to pass the handleSubmit as a prop 您需要将handleSubmit作为prop传递

 <SubmitButton value='Submit' onSubmit={this.handleSubmit.bind(this)}/>

Then assign that prop to the button on the render function of the SubmmitButton component. 然后将该prop指定给SubmmitButton组件的render函数上的按钮。

// submmit button component @render method

<button onClick={this.props.onSubmit} >Submit</button>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM