反应句柄表单提交

Mat*_*ias 7 javascript forms reactjs react-redux

我正在尝试在React/Redux中创建一个表单.现在我只希望表单在提交表单时触发我的函数handleSubmit.但是目前看起来该功能是在页面加载时立即触发的......

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);
Run Code Online (Sandbox Code Playgroud)

我知道剩下的代码并不完全正确但我现在主要担心的是在正确的时刻触发onSubmit操作.

提前致谢!

U r*_*u s 26

看起来你没有约束你的handleSubmit.

来自文档:

方法遵循与常规ES6类相同的语义,这意味着它们不会自动将其绑定到实例.

你有三个选择

  1. 添加一个构造函数并在那里进行绑定(推荐):

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

  2. 直接绑定:

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

  3. 使用箭头=>功能

    onSubmit={() => this.handleSubmit}

  • 2个第一个正在运行但第3个选项不起作用.它应该是这样的:onSubmit = {()=> this.handleSubmit()} (3认同)