Я пытаюсь перенаправить на другой путь ПОСЛЕ завершения запроса POST с использованием fetch.
Я установил переменную в своем состоянии, чтобы отслеживать после завершения функции POST
this.state.successfulPOST: false
, и я условный рендеринг, так что если я this.state.successfulPOST: true
,мой редирект обрабатывается
Проблема в том, что мое перенаправление происходит до моего запроса POST. Как я могу сделать так, чтобы мой POST-запрос для /api/account/update/
был завершен, а затем обработать мой редирект для моего GET-запроса по этому пути /checkout/shippingaddress
?
Вот мой полный код:
import React, { Component } from "react";
import "whatwg-fetch";
import cookie from "react-cookies";
import { Redirect } from 'react-router-dom';
class GuestEmailForm extends Component {
constructor(props) {
super(props);
this.state = {
email: "",
successfulPOST: false,
};
}
updateGuestEmail = (data) => {
const endpoint = "/api/account/update/";
const csrfToken = cookie.load("csrftoken");
if (csrfToken !== undefined) {
let lookupOptions = {
method: "POST",
redirect: 'follow',
headers: {
"Content-Type": "application/json",
"X-CSRFToken": csrfToken
},
body: JSON.stringify(data),
credentials: "include"
};
fetch(endpoint, lookupOptions)
.then(response => {
return response.json();
})
.then(responseData => {
this.setState({email: responseData.email})
})
.then(
this.setState({successfulPOST: true})
)
.catch(error => {
console.log("error", error);
alert("An error occured, please try again later.");
});
}
};
handleEmailChange = event => {
const { name, value } = event.target;
this.setState({ [name]: value });
};
handleSubmit = (event) => {
event.preventDefault();
let data = this.state;
if (data !== undefined){
(
this.updateGuestEmail(data),
console.log(this.state.email)
)
} else {
""
}
};
resetSucessfulPOST = () => {
this.setState({
successfulPOST: false,
})
}
componentDidMount() {
this.resetSucessfulPOST()
}
render() {
const {email, successfulPOST} = this.state
// redirect to shipping page after successful POST of email
if (successfulPOST === true)
return <Redirect push to={{ pathname: '/checkout/shippingaddress'}} />
else
return (
<form onSubmit={this.handleSubmit}>
<div>
<label>
Guest Email:
<input
className="input"
type="email"
name="email"
value={email}
onChange={event => {
this.handleEmailChange(event);
}}
/>
</label>
<button className="btn btn-primary">Submit</button>
</div>
</form>
);
}
}
export default GuestEmailForm;
Заранее большое спасибо!