我正在尝试在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);

我知道代码的其余部分还不是全部正确,但是我现在主要关心的只是在适当的时候触发onSubmit操作。

提前致谢!

最佳答案

看起来您没有绑定(bind)handleSubmit

the docs:



您有三个选择

  • 添加一个构造函数并在那里进行绑定(bind)(推荐):
    this.handleSubmit = this.handleSubmit.bind(this);
  • 直接绑定(bind):
    onSubmit={this.handleSubmit.bind(this)}
  • 使用箭头=>函数
    onSubmit={() => this.handleSubmit}
  • 09-25 16:18