Сейчас я в Login.php. После нажатия submit я без проблем перенаправляюсь на Home.js, но никакая информация не отправляется в базу данных.
Однако, если я избавлюсь от перенаправления, данные будут отправлены в базу данных без проблем, но они не будут перенаправлять меня на Home.js. Вместо этого он перенаправляет меня на demo.php
Цель: Как я могу успешно перенаправиться на Home.js (которым я сейчас являюсь) и одновременно отправлять данные в базу данных?
Что я делаю не так и как это исправить?
Вот Login.js:
import React, { Component } from 'react';
import Home from "./Home";
class Login extends Component {
constructor(props) {
super(props);
this.state = {
name: "",
password: "",
redirect: false
};
this.submitForm = this.submitForm.bind(this);
}
submitForm(e) {
e.preventDefault();
const formData = new FormData();
formData.append('json', JSON.stringify(this.state));
fetch("http://localhost/demo_react/api/demo.php", {
method: "POST",
body: formData
}).then((response) => {
console.info(response);
});
this.setState({redirect: true})
}
render() {
const go = this.state.redirect;
if (go) return <Home/>;
return (
<form method = "post">
<div className = "form-group">
<label htmlFor = "username">Email</label>
<input
className = "form-control"
value = {this.state.name}
type = "text"
name = "username"
onChange = {e => this.setState({name: e.target.value})}
/>
</div>
<div className = "form-group">
<label htmlFor = "password">Password</label>
<input
className = "form-control"
type = "password"
name = "password"
onChange = {e => this.setState({password: e.target.value})}
/>
</div>
<button
className = "btn btn-primary"
type = "submit"
onClick = {e => this.submitForm(e)}
value = "Login"
name = {"submit"}>Submit
</button>
</form>
);
}
}
export default Login;
Вот demo.php:
$connection = mysqli_connect("localhost", "root", "", "loginapp");
$username = $_POST['username'];
$password = $_POST['password'];
if (isset($_POST['submit'])) {
$query = "INSERT INTO users(username, password) ";
$query .= " VALUES('$username', '$password')";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Query failed" . mysqli_error($connection));
} else {
echo "Data sent successfully to SQL";
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Fetch - это асинхронная функция, поэтому перенаправление запускается, пока выполняется отправка формы. Вероятно, вам следует установить состояние перенаправления после отправки ответа, поэтому здесь:
}).then((response) => {
console.info(response);
this.setState({redirect: true})
});
И пока вы это делаете, вы должны проверить React Router и его компонент Redirect. Это лучший способ перенаправления.
// https://reacttraining.com/react-router/web/example/auth-workflow