๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/React

[react] Lottie ํ™œ์šฉํ•˜์—ฌ react์—์„œ ๋กœ๋”ฉ ํ™”๋ฉด ๊ตฌ์„ฑํ•˜๊ธฐ

by ITyranno 2023. 10. 27.
728x90
๋ฐ˜์‘ํ˜•

 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•ฉ์‹œ๋‹ค.

 

 

 

Lottie๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ๋”ฉ ํ™”๋ฉด์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ตฌํ˜„ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

 

 

๋กœ๋”ฉ ํ™”๋ฉด ์˜ˆ์‹œ

 

 

 

 

 

 Lottie ์‚ฌ์ดํŠธ ๋งํฌ

 

https://lottiefiles.com/kr/

 

๋ฌด๋ฃŒ ๋กœํ‹ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋ชจ์…˜ ๊ทธ๋ž˜ํ”ฝ์„ ์œ„ํ•œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋„๊ตฌ๋ฅผ ํ•œ ๊ณณ์— - ๋กœํ‹ฐํŒŒ์ผ์ฆˆ/LottieFi

๋กœํ‹ฐํŒŒ์ผ์ฆˆ/LottieFiles๋Š” ์˜คํ”ˆ์†Œ์Šค ์• ๋‹ˆ๋ฉ”์ด์…˜ ํฌ๋งท ๋กœํ‹ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ํฐ ๋ฌด๋ฃŒ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์›น, iOS, ์•ˆ๋“œ๋กœ์ด๋“œ, ์œˆ๋„์šฐ๋ฅผ ์œ„ํ•œ ๋ชจ์…˜ ๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์„ ์ง€์›ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํˆด์„ ํ†ต

lottiefiles.com

 

1. Lottie ์„ค์น˜

 

Lottie๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„(Ctrl+J) ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

npm install react-lottie

 

 

2. import

 

Lottie๋ฅผ ์„ค์น˜ํ•œ ํ›„์—๋Š”, ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์— import ํ•ด์ค๋‹ˆ๋‹ค.

 

import Lottie from 'react-lottie';

 

 

3. ๋˜ํ•œ, ์‚ฌ์šฉํ•  ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ JSON ํŒŒ์ผ์„ import ํ•ด์ค๋‹ˆ๋‹ค.

 

import LoadingAnimation from '../lottie/loading.json';

 

ํŒŒ์ผ ๊ฒฝ๋กœ์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

4. ์ปดํฌ๋„ŒํŠธ

 

Loading.jsx

 

import React from 'react';
import Lottie from 'lottie-react';
import LoadingAnimation from '../lottie/loading.json'; // ๋กœ๋”ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ JSON ํŒŒ์ผ ๊ฒฝ๋กœ

const Loading = () => {
    return (
        <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100vh' }}>
            <Lottie animationData={LoadingAnimation} loop autoPlay />
        </div>
    );
};

export default Loading;

 

 

5. loading.json

 

lottie์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›์€ loading.json ํŒŒ์ผ์„ src ๋‚ด๋ถ€์— ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

 

 

6. ๋กœ๋”ฉ ์„ค์ •

 

์ ์ ˆํ•œ ์œ„์น˜์— ๋กœ๋”ฉ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

App.js

 

function App() {
  const [message, setMessage] = useState("");
  const [isLoading, setIsLoading] = useState(true); // ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ

  useEffect(() => {
    // ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹œ๋ฎฌ๋ ˆ์ดํŠธ
    setTimeout(() => {
      fetch('/media/cardata')
        .then(response => response.text())
        .then(message => {
          setMessage(message);
          setIsLoading(false); // 2์ดˆ ํ›„์— ๋กœ๋”ฉ ์™„๋ฃŒ๋กœ ์„ค์ •
        });
    }, 2500); // 2์ดˆ ์ง€์—ฐ
  }, []);

  return (
    <>
      {isLoading ? (
        <Loading />
      ) : (
      )}
    </>
  );
}

export default App;

 

 

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด loading ํ™”๋ฉด์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

loading