Я переношу редукционную форму на новейшую версию 6.0.0rc3. В этой версии массив fields удален и заменен компонентом Field (см. http://redux-form.com/6.0.0-rc.3/docs/MigrationGuide.md/). Раньше я расширял функцию onBlur по умолчанию в v5 следующим образом:
const { user_zipcode } = this.props.fields;
onChange={
val => user_zipcode.onChange(this._handleZipcodeChange(val))
}
Однако в новой версии этого сделать уже нельзя, потому что this.props.fields
не существует.
Из того, что я нашел в документах, новый способ должен состоять в том, чтобы создать компонент для каждого поля формы, который имеет отдельную функцию, и расширить там функцию onBlur:
_onBlur() {
// my custom blur-function
}
render() {
const { input, touched, error } = this.props;
return (
<input
className={styles.input}
{...input}
onBlur={() => {
// 2 functions need to be called here
this._onBlur();
input.onBlur();
}}
/>
);
}
Это нормально, за исключением того, что мне нужно создать новый элемент для каждого поля, которое должно делать что-то другое, когда происходит событие размытия. В некоторых полях мне нужно сделать вызов API, что я и делаю, отправляя действие. Например, я должен сделать это, чтобы получить адрес. В этих компонентах я должен подключить свой магазин, поэтому он подключается много раз.
Я попытался передать свою пользовательскую функцию от родителя к компоненту Field, например:
<Field
type="text"
name="user_zipcode"
component={Zipcode}
onBlurFunction={this._myBlurFunction}
/>
и получить обе функции в моем компоненте из реквизита:
...
onBlur={() => {
input.onBlurFunction();
input.onBlur();
}}
...
Это не работало правильно из-за нового React warning< /а>.
Есть лучший способ это сделать?