Я создал компонент navbar, который, когда вы нажимаете на определенную кнопку, появляется модальное окно. Внутри этого модального окна есть форма. Когда форма заполнена (когда все обязательные поля заполнены) и пользователь нажимает кнопку «Добавить», я хочу, чтобы форма исчезла из модального поля и вместо этого появилось сообщение «Завершение успешно». Я также хотел показать спиннер загрузки React в течение примерно 5 секунд до завершения шоу. Вот мой модальный компонент -
function AddSystemModal(props: any) {
return (
<Modal
{...props}
size="lg"
aria-labelledby="contained-modal-title-vcenter"
centered
>
<Modal.Header closeButton>
<Modal.Title id="contained-modal-title-vcenter">
Add New System
</Modal.Title>
</Modal.Header>
<Modal.Body>
<SystemForm />
</Modal.Body>
<Modal.Footer></Modal.Footer>
</Modal>
);
}
export { AddSystemModal };
Вот мой компонент формы (немного грязный). В тот момент мне удалось заставить блесну появляться, когда нажата кнопка «Добавить», но с точки зрения очистки содержимого модального et c. Я застрял.
function SystemForm() {
const [validated, setValidated] = useState(false);
const [showSpinner, setShowSpinner] = React.useState(false);
const changeModal = () => setShowSpinner(true);
const LoadingSpinner = () => (
<div id="spinner" className="loading-spinner">
<Spinner animation="border" role="status">
<span className="sr-only">Loading...</span>
</Spinner>
</div>
);
const handleSubmit = (event) => {
const form = event.currentTarget;
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
setValidated(true);
};
return (
<Form noValidate validated={validated} onSubmit={handleSubmit}>
<Form.Row>
<Form.Group as={Col} md="4" controlId="validationCustom01">
<Form.Label>ID</Form.Label>
<Form.Control
required
type="text"
placeholder="Leave Blank For New System"
defaultValue=""
/>
</Form.Group>
<Form.Group as={Col} md="4" controlId="validationCustom02">
<Form.Label>Name</Form.Label>
<Form.Control
required
type="text"
placeholder="Name"
defaultValue=""
/>
<Form.Control.Feedback>Looks good!</Form.Control.Feedback>
</Form.Group>
<Form.Group controlId="exampleForm.SelectCustomSizeLg">
<Form.Label>Allow Multiple Xref</Form.Label>
<Form.Control as="select" custom required>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</Form.Control>
<Form.Control.Feedback type="invalid">
Please select an option.
</Form.Control.Feedback>
</Form.Group>
</Form.Row>
<Form.Row>
<Form.Group controlId="exampleForm.SelectCustomSizeLg">
<Form.Label>Status Code</Form.Label>
<Form.Control as="select" custom required>
<option>Available</option>
<option>Blah</option>
<option>Blah</option>
</Form.Control>
<Form.Control.Feedback type="invalid">
Please provide a valid status code.
</Form.Control.Feedback>
</Form.Group>
<Form.Group as={Col} md="3" controlId="validationCustom04">
<Form.Label>Last Modified By</Form.Label>
<Form.Control type="text" placeholder="" />
</Form.Group>
</Form.Row>
<Button onClick={changeModal} type="submit">
Add
</Button>
<div>{showSpinner ? <LoadingSpinner /> : null}</div>
</Form>
);
}
Я пытался поискать в Google, чтобы посмотреть, как я могу очистить содержимое чего-либо в React, но не смог найти много. Мне интересно, связано ли это с тем, как я расположил компонент и нужно ли мне иметь два отдельных компонента внутри модальных и условно отображать их в зависимости от того, нажал ли пользователь «Добавить».
Извиняюсь, если это плохой вопрос - я новичок в изучении React!