
π λ€μ΄κ°λ©°

React λ₯Ό νμ©ν΄μ μ€λͺ© κ²μμ ꡬννλ μ€μ μμ κ°μ΄ νλ©΄ μΌμͺ½ μλ¨μ νμ΄λ¨Έλ₯Ό μ€μ ν΄μ£Όκ³ μΆμμ΅λλ€.
μ¬μ©μκ° λ°λλμ λμΌλ©΄ νμ΄λ¨Έκ° μ¬μ€μ λμ΄μΌ νκΈ° λλ¬Έμ Timer μ»΄ν¬λνΈλ₯Ό state μ λ°λΌ useEffect λ₯Ό νμ©νμ¬ λ€μ μ€μ ν΄μ£Όλ λ°©λ²μ μ¬μ©νκΈ°λ‘ νμ΅λλ€.
νμ¬ hooks μ μ΄μ©ν΄μ μ»΄ν¬λνΈλ₯Ό μμ±νκ³ μμκΈ° λλ¬Έμ μ΄λ² ν¬μ€ν
μμλ νμ΄λ¨Έ 리λλλ§ λ‘μ§μ μ μΈνκ³ React Hooks μ νμ©νμ¬ κ°λ¨ν νμ΄λ¨Έλ₯Ό μ€μ νλ λ°©λ²μ μμλ³΄κ² μ΅λλ€.
π μλ°μ€ν¬λ¦½νΈ νμ΄λ¨Έ μ€μ ν¨μ
μλ°μ€ν¬λ¦½νΈμλ νμ΄λ¨Έλ₯Ό μ€μ ν μ μλ ν¨μκ° λ κ°μ§ μ‘΄μ¬ν©λλ€.
νλλ setTimeout μ΄κ³ λλ¨Έμ§ νλλ setInterval λ‘ λ ν¨μλ λͺ©μ μ λ§κ² μ¬μ©νλ©΄ λ©λλ€.
μ΄λ² ν¬μ€ν
μμ μ¬μ©ν setInterval ν¨μλ μΈμλ‘ μ€νμν¬ ν¨μ F μ λκΈ° μκ° T λ₯Ό λ°μ νΈμΆ μ€μΌμ€λ§μ ν©λλ€.
let timerId = setInterval(() => {
console.log("2μ΄λ§λ€ μ€ν");
}, 2000);
setTimeout(() => {
clearInterval(timerId);
}, 7000);
π useEffect λ₯Ό νμ©ν νμ΄λ¨Έ μ€μ
useEffect λ React Hook μΌλ‘ μ»΄ν¬λνΈλ₯Ό μ€κ³ν λ λΌμ΄ν μ¬μ΄ν΄ μ€ componentDidMount μ componentDidUpdate κ·Έλ¦¬κ³ componentWillUnmount λ₯Ό μμ°λ₯΄λ μν μ λ΄λΉνκ³ μμ΅λλ€.
μ΄λ² ν¬μ€ν
μμλ νμ΄λ¨Έκ° DOMμ 첫 λλλ§ μ΄ν μ€μ λκ³ μΈλ§μ΄νΈ μ ν΄μ νκΈ° μν΄ useEffect λ₯Ό νμ©ν©λλ€.
import React, { useEffect } from "react";
const App = () => {
useEffect(() => {
const timerId = setTimeout(() => {
// do something ...
}, 1000);
return () => clearTimeout(timerId);
}, []);
return <div>νμ΄λ¨Έ μμ </div>;
};
export default App;
μμ κ°μ΄ useEffect μ λλ²μ§Έ μΈμλ₯Ό λΉ λ°°μ΄λ‘ μ€μ ν κ²½μ° μμ‘΄μ±μ΄ μ‘΄μ¬νλ μμκ° μκΈ° λλ¬Έμ
νλ©΄μ νλ² λλλ§ λ μ΄ν λ€μ νΈμΆλμ§ μμ΅λλ€.
ν κ°μ§ μ£Όμν μ μ λ°ν κ°μΌλ‘ ν¨μλ₯Ό μ§μ ν΄ μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λλ μμ μ νμ΄λ¨Έλ₯Ό ν΄μ ν΄μ£Όλλ‘ νλ κ²μ
λλ€.
μ΄λ κ² ν΄μ£Όμ§ μμΌλ©΄ νμ΄λ¨Έλ λΉλκΈ°λ‘ μ§νλκΈ° λλ¬Έμ μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λλλΌλ νμ΄λ¨Έλ μμ΄μ§μ§ μλ μν©μ΄ λ°μν©λλ€.
π νλ‘μ νΈμ μ μ©ν΄λ³΄μ!
μ΄μ μ΄λ₯Ό νμ©ν΄μ μ€μ νλ‘μ νΈμ 3λΆμ νμ΄λ¨Έλ₯Ό ꡬνν΄λ³΄κ² μ΅λλ€.
μ΄ λ¨μλ‘ μκ°κ°μ κ³μ°ν΄μ νλ©΄μ λλλ§ν΄μ€λλ€.
μ΄κΈ° λλλ§ μ νμ΄λ¨Έλ₯Ό μ€μ ν λ€, λ§λ£κ° λ κ²½μ° μ΄λ²€νΈλ₯Ό λ°μμν€λλ‘ μ€κ³νμμ΅λλ€.
μ΄λ ν΄λΉ μ»΄ν¬λνΈκ° λ€μ λλλ§ λλ κ²½μ°λ νμμμλλ κ²½μ° νμ΄λ¨Έλ₯Ό ν΄μ ν΄μ£ΌκΈ° μν΄ κ°κ° clearInterval μ ν΄μ€λλ€.
μ¬κΈ°μ λμ¬κ²¨λ³Ό μ μ useEffect μ dependencies μ time λμ sec μΌλ‘ μ§μ ν΄μ€ κ²μ
λλ€.
μ΄λ useRef λ κ°μ΄ λ³ννλλΌλ 리λλλ§μ λ°μμν€μ§ μκΈ° λλ¬Έμ
λλ€.
const Timer = () => {
const [min, setMin] = useState(3);
const [sec, setSec] = useState(0);
const time = useRef(180);
const timerId = useRef(null);
useEffect(() => {
timerId.current = setInterval(() => {
setMin(parseInt(time.current / 60));
setSec(time.current % 60);
time.current -= 1;
}, 1000);
return () => clearInterval(timerId.current);
}, []);
useEffect(() => {
// λ§μ½ νμ μμμ΄ λ°μνμ κ²½μ°
if (time.current <= 0) {
console.log("νμ μμ");
clearInterval(timerId.current);
// dispatch event
}
}, [sec]);
return (
<div className="timer">
{min} λΆ {sec} μ΄
</div>
);
};
π μ°Έκ³ μλ£
'π¨βπ» web.dev > frontend' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [JavaScript] Array.sort λ μμ μ±μ 보μ₯ν κΉ? (0) | 2022.03.09 |
|---|---|
| [TypeScript] js.map νμΌμ 무μμΌκΉ? (0) | 2022.03.07 |
| [JavaScript] Object.defineProperty μ λν΄μ (0) | 2022.03.06 |
| [JavaScript] Promise.all vs Promise.allSettled (0) | 2022.02.20 |
| [JavaScript] μ΅λͺ ν¨μμ κΈ°λͺ ν¨μ, μΈμ μ¨μΌν κΉ? (0) | 2022.02.20 |
π¬ λκΈ