我正在尝试向redux-form添加第二个提交按钮。
两个按钮都应该调度保存数据的操作,但根据按下的按钮,用户应该被路由到不同的页面。
所以我将一个处理程序定义为onSubmit
prop传递给表单。
但据我所知,只有表单数据传递给此处理程序:
handleSubmit
上的文档说明:
要传递给
<form onSubmit={handleSubmit}>
的函数 或<button onClick={handleSubmit}>
。 它将运行验证,同步和异步,如果表单有效, 它将使用表单数据的内容调用this.props.onSubmit(data)
。
我缺少的是一种将按下的按钮信息(例如点击事件)传递给我的onSubmit处理程序的方法,这样我就可以按预期保存和路由。
答案 0 :(得分:35)
有很多方法可以做到这一点,但它们都涉及根据按下的按钮附加按钮数据。这是一个内联版本。
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()
。
答案 1 :(得分:1)
@mibbit onSubmit是您定义的函数(至少这是文档所说的:look the onSubmit method)。这是针对redux-form 7.x的@Erik R的例子。
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)