20

我正在尝试向redux-form添加第二个提交按钮。

两个按钮都应该发送一个保存数据的操作,但是根据按下的按钮,用户应该被路由到不同的页面。

所以我定义了一个处理程序,我将其作为onSubmit道具传递给表单。

但据我所知,只有表单数据被传递给这个处理程序:

注意的文档handleSubmit

旨在传递给<form onSubmit={handleSubmit}> 或的函数<button onClick={handleSubmit}>。它将运行同步和异步验证,如果表单有效,它将this.props.onSubmit(data)使用表单数据的内容进行调用。

我缺少的是一种将有关按下按钮的信息(例如单击事件)传递给我的 onSubmit 处理程序的方法,以便我可以按预期保存和路由。

4

2 回答 2

44

有很多方法可以做到这一点,但它们都涉及根据按下的按钮附加按钮数据。这是一个内联版本。

class Morpheus extends Component {
  render() {
    const { handleSubmit } = this.props;
    return (
      <div>
        Fields go here
        <button onClick={handleSubmit(values => 
          this.props.onSubmit({ 
            ...values,
            pill: 'blue'
          }))}>Blue Pill</button>
        <button onClick={handleSubmit(values => 
          this.props.onSubmit({ 
            ...values,
            pill: 'red'
          }))}>Red Pill</button>
      </div>
    );
  }
}

export default reduxForm({
  form: 'morpheus'
})(Morpheus)

处理所有验证检查和诸如此类的handleSubmit事情,如果一切都有效,它将使用表单值调用赋予它的函数。所以我们给它一个附加额外信息和调用的函数onSubmit()

于 2016-05-11T21:47:23.070 回答
2

@mibbit onSubmit 是您定义的函数(至少这是文档所说的:查看 onSubmit 方法)。这适用于 @Erik R 的示例之后的 redux-form 7.x。

    class Morpheus extends Component {
    constructor(props) {
        super(props);

        this.state = {};
        this.onSubmit = this.onSubmit.bind(this);
    }

    onSubmit(values, pill) {
        // do magic here
    }

    render() {
        const {
            handleSubmit
        } = this.props;
        return ( <
            div >
            Fields go here <
            button onClick = {
                handleSubmit(values =>
                    this.onSubmit({
                        values,
                        pill: 'blue'
                    }))
            } > Blue Pill < /button> <
            button onClick = {
                handleSubmit(values =>
                    this.onSubmit({
                        values,
                        pill: 'red'
                    }))
            } > Red Pill < /button> <
            /div>
        );
    }
}

export default reduxForm({
    form: 'morpheus'
})(Morpheus)
于 2017-11-05T05:00:11.527 回答