Отклонено представление формы в onChange - PullRequest
0 голосов
/ 01 мая 2018

У меня есть такое поле:

{
    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.

1 Ответ

0 голосов
/ 01 мая 2018

Так что на самом деле моя логика выше работает. Я создал демо здесь, в Интернете, и он отлично работает:

https://codesandbox.io/s/37z9217q6

Проблема в том, что я делаю это в реагирующем на Android, и там есть ошибка, которая вызывает у меня эту проблему, я подал ошибку - https://github.com/facebook/react-native/issues/19085

...