Модальное закрытие сразу

Я пытаюсь добавить модальное окно на свою страницу, но оно остается открытым только на секунду, а затем снова закрывается.

Вот мой код:

Home.js

import './Home.css';
import React, {useState} from 'react';
import Modal from "./components/Modal";


function Home() {
    const [openModal, setOpenModal] = useState(false);
    return (

        <div>
            {console.info(openModal)}
            <div className = "App">
                <header className = "App-header">
                    <h1 className = "App-name">iScore</h1>
                </header>
            </div>

            <div className = "Auth-form-container">
                <form className = "Auth-form">
                    <div className = "Auth-form-content">
                        <h3 className = "Auth-form-title">Sign In</h3>
                        <div className = "form-group-both">
                            <div className = "form-group mt-3">
                                <label>Email address: </label>
                                <input
                                    type = "email"
                                    className = "form-control mt-1"
                                    placeholder = "Enter email"
                                />
                            </div>
                        </div>
                        <div className = "form-group-pass">
                            <div className = "form-group mt-3">
                                <label>Password: </label>
                                <input
                                    type = "password"
                                    className = "form-control mt-1"
                                    placeholder = "Enter password"
                                />
                            </div>
                        </div>
                        <div className = "popup">
                            <button className = "submit"
                            >
                                Submit
                            </button>
                        </div>
                        {openModal && <Modal setOpenModals = {setOpenModal}/>}
                        <p className = "forgot-password text-right mt-2">
                            Forgot <a href = "#">password?</a>
                        </p>
                        <p>
                            Need an account?
                        </p>
                        <button className = "sign-up" onClick = {() => {
                            setOpenModal(true);
                        }}>Register
                        </button>
                    </div>
                </form>
            </div>
        </div>

    );
}

export default Home;

Modal.js

import "./Modal.css";
import {useState} from "react";

function Modal({ setOpenModals }) {

    const handleChangeEvent = (event) => {
        console.info("Checked: ", event.target.checked)
        setAgreement(event.target.checked);
    }

    return(
        <div className = "modalBackground">
            <div className = "modalContainer">
            <article>
                <button className = "Close" onClick = {() => setOpenModals(false)}> &times; </button>
                    {/*<form>*/}
                        <div className = "Auth-form-content">
                            <h3 className = "Auth-form-title">Register</h3>
                            <div className = "form-group mt-3">
                                <label>Email address: </label>
                                <input
                                    type = "email"
                                    className = "form-control mt-1"
                                    placeholder = "Enter email"
                                />
                            </div>
                            <div className = "form-group mt-3">
                                <label>Email address: </label>
                                <input
                                    type = "name"
                                    className = "form-control mt-1"
                                    placeholder = "Enter first name"
                                />
                            </div>
                            <div className = "form-group mt-3">
                                <label>Password: </label>
                                <input
                                    type = "password"
                                    className = "form-control mt-1"
                                    placeholder = "Enter password"
                                />
                            </div>
                            <div className = "form-group mt-3">
                                <label>Confirm Password: </label>
                                <input
                                    type = "password"
                                    className = "form-control mt-1"
                                    placeholder = "Enter password again"
                                />
                            </div>
                            <div>
                                <input type = "checkbox" name = "terms" value = "yes" onChange = {handleChangeEvent}/>
                                    <label htmlFor = "terms"> I agree to the terms and conditions</label>
                            </div>
                        </div>
                    {/*</form>*/}
            </article>
            <footer>
                <button disabled = {!agreement} onClick = {() => {handleSubmit();setOpenModals(false)}}>Register</button>
                <button onClick = {() => setOpenModals(false)} >Close</button>
            </footer>
            </div>
        </div>
    )
}

export default Modal

Кажется, что как только я нажимаю Register, я вижу в консоли, что для openModal установлено значение True, но затем сразу же возвращается значение false.

Я немного не понимаю, что нужно изменить, чтобы попытаться заставить эту работу работать. С моей точки зрения, это должно быть сделано правильно.

Я что-то упустил здесь?

Итак, setAgreement и agreement отсутствуют в коде, а это означает, что может отсутствовать и другой код, который может быть причиной вашей проблемы.

Gabriele Petrioli 01.02.2023 08:18
Поведение ключевого слова "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) для оценки ваших знаний,...
1
1
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в том, что в Modal.js в <button disabled = {!agreement} onClick = {() => {handleSubmit();setOpenModals(false)}}>Register</button> вы используете необъявленный agreement переменная, которая вызывает Modal.js ошибку и не отображается. Вам нужно передать agreement как опору или добавить новое состояние const [agreement, setAgreement] = useState(false) или удалить disabled = {!agreement} с кнопки в Modal.js

Отредактировано
У вас есть тег form в Home.js, и когда вы нажимаете кнопку Register, он открывает модальное окно и отправляет форму. По умолчанию кнопка имеет встроенное свойство типа submit. При нажатии или активации внутри формы эта форма будет отправлена ​​(и вызовет соответствующее событие отправки). Это событие отправки приводит к закрытию Modal. Добавьте type = "button" к кнопке регистрации в Home.js.

Я удалил disabled = {!agreement}, но все равно без радости. Ошибки нет, модальное окно всплывает на секунду.

HLT 31.01.2023 23:11

@HLT Я отредактировал свой ответ, теперь он должен работать

ign0ramus 01.02.2023 07:35

С этим все в порядке, большое спасибо, это сводило меня с ума

HLT 01.02.2023 16:57

в:

<button disabled = {!agreement} onClick = {() => 
{handleSubmit();setOpenModals(false)}}>Register</button>

Вы вызываете setOpenModals false сразу после handleSubmit(), что вызывает немедленное закрытие модального окна.

Вам нужно закрыть модальное окно в функции handleSubmit().

Это должно вызываться только onClick, верно? Он не выполняется при модальной загрузке. Во всяком случае, я попытался полностью удалить эту строку, но она все еще не работает.

HLT 01.02.2023 00:09

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