π λ€μ΄κ°λ©°
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 > fe' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
File API λ₯Ό μ΄μ©ν Input μ»΄ν¬λνΈ λ§λ€κΈ° (2) | 2022.08.13 |
---|---|
Next.js API Routes μμ보기 (2) | 2022.07.26 |
React μ»΄ν¬λνΈ(children) νμ΄ννκΈ° (0) | 2022.07.23 |
React μ€λλ ν΄λ‘μ (Stale Closure) μ΄μ ν΄κ²°νκΈ° (0) | 2022.05.11 |
React μ μ΄ μ»΄ν¬λνΈ vs λΉμ μ΄ μ»΄ν¬λνΈ (0) | 2022.04.10 |
π¬ λκΈ