I am trying to add a second submit button to a redux-form.
Both buttons should dispatch an action that saves the data but depending on the button pressed the user should be routed to different pages.
So I defined a handler that I pass as onSubmit
prop to the form.
But as far as I can see only the form data is passed to this handler:
The docs on handleSubmit
note:
A function meant to be passed to
<form onSubmit={handleSubmit}>
or to<button onClick={handleSubmit}>
. It will run validation, both sync and async, and, if the form is valid, it will callthis.props.onSubmit(data)
with the contents of the form data.
What I am missing is a way to also pass the information about the button pressed (e.g. the click event) to my onSubmit handler, so that i can save and route as intended.
There are many ways to do this, but they all involve appending the button data depending on which button was pressed. Here's an inline version.
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)
The handleSubmit
handles all the validation checking and whatnot, and if everything is valid, it will call the function given to it with the form values. So we give it a function that appends extra information and calls onSubmit()
.
@mibbit onSubmit is a function that you define (at least this is what the doc says: look the onSubmit method). This is for redux-form 7.x following example of @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)
来源:https://stackoverflow.com/questions/37168954/redux-form-how-to-handle-multiple-buttons