Redux форма: как обрабатывать несколько кнопок?
Я пытаюсь добавить вторую кнопку отправки в redux-form.
обе кнопки должны направить действие, которое сохраняет данные, но в зависимости от нажатой кнопки пользователь направляется на разные страницы.
поэтому я определил обработчик, который я передаю как onSubmit
опора на форму.
но насколько я могу видеть только форма сведения передается этому обработчику:
документы на handleSubmit
Примечание:
функция, предназначенная для передачи в
<form onSubmit={handleSubmit}>
или<button onClick={handleSubmit}>
. Он будет запускать проверку, как синхронизацию, так и асинхронность, и, если форма действительна, он будет зватьthis.props.onSubmit(data)
с содержимым данных формы.
то, что мне не хватает, - это способ также передать информацию о нажатой кнопке (например, событие click) моему обработчику onSubmit, чтобы я мог сохранять и маршрутизировать по назначению.
2 ответов
есть много способов сделать это, но все они подразумевают добавление данных кнопки в зависимости от того, какая кнопка была нажата. Вот встроенная версия.
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()
.
@mibbit onSubmit-это функция, которую вы определяете (по крайней мере, это то, что говорит doc: посмотрите метод onSubmit). Это для redux-формы 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)