У меня есть такое поле:
{
render() {
return <Field type="text" onChange={this.debouncedSubmit} />
....
}
debouncedSubmit = debounce(this.props.submit, 500)
}
export default reduxForm({
form: 'week-form',
onSubmit: async function() {
await new Promise(resolve => setTimeout(resolve, 5000))
}
})
Это прекрасно работает, за исключением одного вопроса. Мы видим здесь представление занимает 5 секунд. Мы также видим, что дебукн составляет 500 мс. Допустим, пользователь набрал два символа, затем подождал 1сек. Дебютирование запущено, и отправка в процессе. Теперь, когда отправка выполняется, допустим, пользователь вводит другого персонажа. Это вызывает debounce, и через 1.5 секунды запускается отправка. Однако из-за того, что отправка в данный момент выполняется, эта будет пропущена.
Существует ли шаблон с избыточной формой, чтобы не пропустить это?
Что я пробовал:
Я подумал «переинициализировать» форму, но «не обновлять значение поля, если текущее значение поля отличается от значения, которое он собирается инициализировать», а затем в componentDidUpdate, если форма грязная, тогда я бы снова вызвал submit. Однако я столкнулся с проблемой:
Я установил в reduxForm:
enableReinitialize: true,
keepDirtyOnReinitialize: true,
И я инициализирую форму данными. Однако после первого представления по какой-то причине оно перезаписывает поле, и я теряю «третий символ», который я вставил во время представления. Почему это происходит, когда я установил для keepDirtyOnReinitialize значение true.