Redux-формы Вызов альтернативной отправки из ComponentWillRecieveProps
версия для редуксов : 6.6.3
реагирующая версия: 15.5.0
Я хочу вызывать различные функции отправки из функции componentWillRecieveProps в моем компоненте реакции.
componentWillReceiveProps(nextProps) {
if (nextProps.updateTierConfigState == "ValidationFulfilled"
&& nextProps.updateMyConfigValidationClean) {
console.log('CWRP calling submit()')
//this.props.submit(); //THIS CALLS DEFAULT on FORM's onSubmit
this.props.handleSubmit(this.updateSubmit().bind(this))
}
else {
this.props.handleSubmit(this.createSubmit().bind(this))
}
}
updateSubmit(values) {
//do stuff
}
createSubmit(values) {
//do stuff
}
У меня есть примеры, как это: https://github.com/erikras/redux-form/issues/711
Но я не смог успешно вызвать handleSubmit. Он не вызывает переданную функцию.
Я отладил в handleSubmit, и он очень быстро возвращается без вызова указанной функции отправки.
2 ответа
Вы сразу вызываете функции, когда передаете их. Когда вы ссылаетесь на функции отправки, вам не нужно включать ()
после имени функции. this.updateSubmit().bind(this)
должно быть this.updateSubmit
, Вам также не нужно связывать здесь.
Изменить: this.props.handleSubmit(this.updateSubmit().bind(this))
Для того, чтобы: this.props.handleSubmit(this.updateSubmit)
Я обнаружил, что мне нужно сделать две вещи.
- Вызовите пользовательский метод отправки, используя эту строку:
this.props.handleSubmit((values)=> this.submitUpdate(values))()
Обратите внимание на добавленный "()" в конце. - Переместите эту строку (и окружающее условие if) в метод componentDidUpdate(). Я использую реквизиты в методе отправки, чтобы определить состояние проверки компонента, и реквизиты из mapStateToProps не назначаются для этого.
componentWillReceiveProps
или жеcomponentWillUpdate
,
Вот мой новый автоматический вызов:
componentDidUpdate() {
//moved this here so that this.props is updated from nextState
if (this.props.updateMyConfigState == "ValidationFulfilled"
&& this.props.updateMyConfigValidationClean) {
this.props.handleSubmit((values) => this.submitUpdate(values))();
}
}
Я осознаю, что это выходит за рамки рекомендации для проверки в форме избыточности, и я признаю, что это может быть не лучшим способом справиться с проверкой. Мои нынешние рассуждения таковы:
- Это позволяет мне иметь несколько действий по проверке отправки (разделяет действия для создания и обновления действий пользователя), где у каждого есть свои ошибки и предупреждения. В частности, Ошибка: запретить действие и WarningsOnly: разрешить, но требует дополнительного одобрения пользователя.
- Визуально представьте ошибки / предупреждения в отдельном списке за пределами элементов графического интерфейса.