Основываясь на первом редактировании ответа выше, я получил следующий код:
import React from 'react';
import { Form, Field } from "react-final-form";
type State = {
submitting: boolean;
}
type Props = {}
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
const initialValues = {};
class MyForm extends React.Component<Props, State> {
state = {
submitting: false,
}
onSubmit = async values => {
this.setState({
submitting: true
})
await sleep(100)
let xhr = new XMLHttpRequest();
xhr.open("POST", "https://...", true) ;
xhr.setRequestHeader("Content-Type", "application/json");
let data = {...}
xhr.send(JSON.stringify(data));
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
let result = JSON.parse(xhr.responseText);
if (result.status === "OK") {
window.location = result.pdf
this.setState({
submitting: false
})
};
}
}
}
}
render() {
return (
<Form
onSubmit={this.onSubmit}
initialValues={initialValues}
render={({ handleSubmit, form, invalid, errors, values }) => (
<form onSubmit={handleSubmit}>
...
<button type="submit" disabled={this.state.submitting}>
{this.state.submitting ? 'Downloading': 'Send'}
</button>
</form>
)}
/>
);
}
}
export default MyForm;
Я приму предыдущий ответ, но буду признателен, если вы исправите ошибки в моем кодев комментариях.