Как правильно перенаправить на компонент js и отправить информацию в db через php после нажатия кнопки отправки?

Сейчас я в 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";
    }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
143
1

Ответы 1

Fetch - это асинхронная функция, поэтому перенаправление запускается, пока выполняется отправка формы. Вероятно, вам следует установить состояние перенаправления после отправки ответа, поэтому здесь:

}).then((response) => {
            console.info(response);
            this.setState({redirect: true})
        });

И пока вы это делаете, вы должны проверить React Router и его компонент Redirect. Это лучший способ перенаправления.

// https://reacttraining.com/react-router/web/example/auth-workflow

Другие вопросы по теме