티스토리 뷰
react-spinners를 사용한 로딩창 만들기
modal을 활용해서 만들면 화면 위에 Loading창이 띄워지게 만들기 가능
공통 함수로 만들어 놓고 사용하면 유용하게 사용 가능
필요한 모듈 설치
react-spinners
npm install --save react-spinners
react-bootstrap의 modal을 사용하기 위해 설치
npm install --save react-bootstrap
LoadingModal.js
//Moudle
import React, { useEffect, useState } from "react";
import { Button, Modal, ModalDialog } from "react-bootstrap";
import "../css/User.css";
import Loader from "react-spinners/RotateLoader";
import { css } from "@emotion/react";
const override = css`
display: block;
margin: 0 auto;
`;
const LoadingModal = (props) => {
const [loading, setLoading] = useState(true);
const [color, setColor] = useState("#19DBB4");
return (
<>
<Modal
{...props}
centered
show={props.show}
// onHide={() => props.setShow(false)}
dialogClassName="loading-container"
style={{ backgroundColor: "rgba(30,30,30,0.5)" }}
>
<Modal.Body style={{ display: "none" }}></Modal.Body>
<div className="overlay-box" width="100%">
<Loader
color={color}
loading={props.show}
css={override}
size={15}
// height={400}
// width={100}
// radius={10}
// margin={20}
speedMultiplier={0.4}
/>
<p style={{ marginTop: "40px", color: "rgb(1B1D1D)", fontWeight: "bold" }}>Loading...</p>
</div>
</Modal>
</>
);
};
export default LoadingModal;
Modal.body에 넣어놓으면 엄청 이쁘지 않은 로딩창이 나오는 걸 볼 수 있습니다.
Modal.body는 none으로 바꿔주시고 div를 새로 만들어서 진행해야 합니다.
이렇게만 해놓고 css 파일을 적용하지 않으면 overlay가 제대로 되지 않음.
/* Loading Bar css */
.loading-container {
border: 0px;
background: rgba(0, 0, 0, 0);
z-index: -1;
content: none;
}
.loading-container > div.modal-content {
border: 0px;
}
.overlay-box {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
background: rgba(255, 255, 255, 0);
z-index: 1000;
}
css를 위의 코드처럼 적용해줘야 이쁘게 오버레이가 됩니다. (글 포스팅하는데 CSS 때문에 고생했던 기억이 새록새록 나네요.)
저는 modal로 만들어놓고 modal show 값을 state로 변경, props로 넘겨주면서 사용 중입니다.
const onClickHandler = () => {
/*LOADING MODAL OPEN*/
setModalShowLoading(true);
axios
.post(`${process.env.REACT_APP_SERVER}/api/서버요청경로`, {}, headers)
.then((res) => {})
.catch((err) => {})
.finally(() => {
/*LOADING MODAL CLOSE*/
setModalShowLoading(false);
});
};
<div className="modal-box">
{modalShowLoading ? (
<LoadingModal show={modalShowLoading} setShow={setModalShowLoading}></LoadingModal>
) : null}
</div>
위의 코드에서 사용한 RotateLodar 말고 더 다양한 로딩 모양을 원한다면 Loader import 부분을 아래의 표를 참고하여 바꿔주시면 됩니다.
https://www.npmjs.com/package/react-spinners
react-spinners
A collection of react loading spinners. Latest version: 0.11.0, last published: a year ago. Start using react-spinners in your project by running `npm i react-spinners`. There are 625 other projects in the npm registry using react-spinners.
www.npmjs.com
'Web' 카테고리의 다른 글
[React] FormData()사용 file 및 json, array 데이터 보내기 (0) | 2022.05.10 |
---|---|
[React] ID 기억하기 cookie에 값 저장 (react-cookie) (0) | 2022.05.07 |
[React] base64로 여러 장의 이미지를 서버로 전송 (0) | 2022.05.04 |
[React] timer (OTP 창 만들기) (0) | 2022.05.03 |
[React] 엔터키 입력으로 로그인 하기 onKeyPress (0) | 2022.05.03 |
- Total
- Today
- Yesterday
- docker # docker build # m1 docker build
- linux/amd64/v2
- docker mysql
- BOJ #JS
- JavaScript #Programmers #lvl2 #프로그래머스 오픈채팅방 # 오픈채팅방 문제
- FormData #FormData 파일전송 #FormData append json # React FormData File #React FormData append Json
- react #img 전송
- mysql date between performance
- Express multer #Express File 저장 #node.js
- node.js 파일 저장
- ec2 instance connect is unable to connect to your instance. ensure your instance network settings are configured correctly for ec2 instance connect. for more information
- mysql date
- Procedure #mysql #mysql Procedure #mysql 반복문 #Procedure 반복문 #mysql insert 반복문
- supported: linux/amd64
- Mac docker.for.mac.host.internal
- AWS #인바운드 #SSH #인스턴스 연결
- excel 파일 만들기 #node.js #express excel 파일 만들기 #데이터 입력해서 excel 파일 만들기
- React filter #js Includes #React Filter includes
- ERROR: failed to solve: no support for running processes with linux/amd64/v3 platform
- 이미지 전송 # 이미지 업로드 #이미지 여러장 #이미지 여러장 업로드 #react 이미지 업로드 #react 이미지 여러장 업로드
- node.js #node.js pdf만들기 #node.js pdfkit
- Pytorch #Yolov5 #Segementation
- react #react-spinners #modal loading #overlay #로딩창 #react 로딩창 만들기
- PDF #pdfkit
- Swal #sweetalert2 #alert #알림창 띄우기 #react swal
- PoolCluster : Error: connect ECONNREFUSED 127.0.0.1:3306)
- reack-cookies #아이디 저장하기 #react 아이디 저장 #react cookie #리엑트 아이디 저장하기
- see ec2 instance connect prerequisites at https://docs.aws.amazon.com/awsec2/latest/userguide #인스턴스 연결 안됨
- mysql date between # mysql date between 대소 비교 연산자
- mysql date type
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |