Вот моя проблема: я использую функциональные компоненты hooks реагирования с более новым useState
hook.Хук useState
возвращает функцию обновления, используемую для обновления этого состояния.У меня проблема с функцией обновления, и это общеизвестно, как работает React.Состояние не обновляется до повторного рендеринга dom
.Но мне нужно отправить данные формы onSubmit
более axios
(или fetch
).
const App = () => {
const [username, setUsername] = useState('')
const handleSubmit = (e) => {
e.preventDefault()
setUsername(e.target.elements.form1.value)
axios.post('http://localhost:3000/api', { name: username })
}
return (
<div>
<form onSubmit={handleSubmit}>
<input type="text" name="form1" placeholder="Enter name:" />
<button type="submit">Submit</button>
</form>
</div >
)
}
В этом коде, когда форма отправляется с событием onSubmit
в теге формы, вызывается функция handleSubmit()
.Здесь функция обновления setUsername()
собирается обновить состояние, а axios
запускает почтовый вызов на внутренний сервер.Но axios.post
всегда будет отправлять только предыдущее значение состояния, потому что функция setUsername()
не завершится, пока не будет воспроизведена dom
.Таким образом, данные, поступающие в бэкэнд, всегда появляются на один шаг позади.
Какой лучший способ сделать это правильно?С моими входными данными формы мне не нужно, чтобы они отображались в dom
, мне просто нужно, чтобы информация формы передавалась бэкэнду.Я не должен даже поместить эти данные в государстве?И если так, то каков лучший способ сделать это с большой формой;скажем, 10 входных значений?
Я также видел, как люди использовали значение = {некоторое значение состояния} в форме ввода для двухстороннего связывания;но это делает использование более одного ввода в форме очень сложным с использованием хуков.Если только нет какого-то магического пути, который я пропустил.
Я просто никогда не видел «стандартный» способ выполнения axios
или получения вызовов в реакции с крючками.Я много искал в Интернете, но, похоже, информации о ней не так много.