Reactμ μ€νμ μΈ experimental_useEvent ν μ μ¬μΈ΅ λΆμν©λλ€. 볡μ‘ν μ ν리μΌμ΄μ μμ μ΄λ²€νΈ νΈλ€λ¬ μμ‘΄μ±μ κ΄λ¦¬νκΈ° μν λͺ©μ , μ΄μ , νκ³ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄νμΈμ.
React experimental_useEvent λ§μ€ν°νκΈ°: μ΄λ²€νΈ νΈλ€λ¬ μμ‘΄μ±μ λν μ’ ν© κ°μ΄λ
Reactμ experimental_useEvent ν
μ React κ°λ°μ μΌλ°μ μΈ κ³Όμ μΈ μ΄λ²€νΈ νΈλ€λ¬ μμ‘΄μ± κ΄λ¦¬ λ° λΆνμν 리λ λλ§ λ°©μ§λ₯Ό ν΄κ²°νκΈ° μν΄ μ€κ³λ λΉκ΅μ μλ‘μ΄ κΈ°λ₯μ
λλ€(μ΄ κΈμ μμ±νλ μμ μμλ μμ§ μ€νμ κΈ°λ₯μ
λλ€). μ΄ κ°μ΄λμμλ experimental_useEventμ λͺ©μ , μ΄μ , νκ³ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄λ³΄λ©° μ¬μΈ΅μ μΌλ‘ λΆμν©λλ€. μ΄ ν
μ μ€νμ μ΄μ§λ§, κ·Έ μ리λ₯Ό μ΄ν΄νλ κ²μ μ±λ₯μ΄ λ°μ΄λκ³ μ μ§λ³΄μ κ°λ₯ν React μ ν리μΌμ΄μ
μ ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. μ€νμ μΈ APIμ λν μ΅μ μ 보λ λ°λμ 곡μ React λ¬Έμλ₯Ό νμΈνμΈμ.
experimental_useEventλ 무μμΈκ°?
experimental_useEventλ *μ λ* λ³νμ§ μλ μ΄λ²€νΈ νΈλ€λ¬ ν¨μλ₯Ό μμ±νλ React ν
μ
λλ€. ν¨μ μΈμ€ν΄μ€λ 리λ λλ§μ΄ λ°μν΄λ μΌμ νκ² μ μ§λλ―λ‘, ν΄λΉ μ΄λ²€νΈ νΈλ€λ¬μ μμ‘΄νλ μ»΄ν¬λνΈμ λΆνμν 리λ λλ§μ νΌν μ μμ΅λλ€. μ΄λ μ¬λ¬ κ³μΈ΅μ μ»΄ν¬λνΈλ₯Ό ν΅ν΄ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ λ¬νκ±°λ μ΄λ²€νΈ νΈλ€λ¬κ° μ»΄ν¬λνΈ λ΄μ λ³κ²½ κ°λ₯ν μν(mutable state)μ μμ‘΄ν λ νΉν μ μ©ν©λλ€.
λ³Έμ§μ μΌλ‘ experimental_useEventλ μ΄λ²€νΈ νΈλ€λ¬μ μ 체μ±(identity)μ μ»΄ν¬λνΈμ λ λλ§ μ£ΌκΈ°μ λΆλ¦¬ν©λλ€. μ¦, μνλ props λ³κ²½μΌλ‘ μΈν΄ μ»΄ν¬λνΈκ° 리λ λλ§λλλΌλ μμ μ»΄ν¬λνΈμ μ λ¬λκ±°λ μ΄ννΈμμ μ¬μ©λλ μ΄λ²€νΈ νΈλ€λ¬ ν¨μλ λμΌνκ² μ μ§λ©λλ€.
μ experimental_useEventλ₯Ό μ¬μ©ν΄μΌ νλκ°?
experimental_useEventλ₯Ό μ¬μ©νλ μ£Όλ μ΄μ λ λΆνμν 리λ λλ§μ λ°©μ§νμ¬ React μ»΄ν¬λνΈ μ±λ₯μ μ΅μ ννκΈ° μν¨μ
λλ€. experimental_useEventκ° μ μ©ν μ μλ λ€μ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄μΈμ:
1. μμ μ»΄ν¬λνΈμ λΆνμν 리λ λλ§ λ°©μ§
μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μμ μ»΄ν¬λνΈμ propμΌλ‘ μ λ¬νλ©΄, μ΄λ²€νΈ νΈλ€λ¬ ν¨μκ° λ³κ²½λ λλ§λ€ μμ μ»΄ν¬λνΈκ° 리λ λλ§λ©λλ€. μ΄λ²€νΈ νΈλ€λ¬μ λ‘μ§μ΄ λμΌνκ² μ μ§λλλΌλ Reactλ λ§€ λ λλ§λ§λ€ μ΄λ₯Ό μλ‘μ΄ ν¨μ μΈμ€ν΄μ€λ‘ μ·¨κΈνμ¬ μμμ 리λ λλ§μ μ λ°ν©λλ€.
experimental_useEventλ μ΄λ²€νΈ νΈλ€λ¬ ν¨μμ μ 체μ±μ μΌμ νκ² μ μ§ν¨μΌλ‘μ¨ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. μμ μ»΄ν¬λνΈλ λ€λ₯Έ propsκ° λ³κ²½λ λλ§ λ¦¬λ λλ§λλ―λ‘, νΉν 볡μ‘ν μ»΄ν¬λνΈ νΈλ¦¬μμ μλΉν μ±λ₯ ν₯μμ κ°μ Έμ¬ μ μμ΅λλ€.
μμ:
experimental_useEvent μ¬μ© μ :
function ParentComponent() {
const [count, setCount] = React.useState(0);
const handleClick = () => {
setCount(count + 1);
};
return (
<ChildComponent onClick={handleClick} />
);
}
function ChildComponent({ onClick }) {
console.log("μμ μ»΄ν¬λνΈ λ λλ§λ¨");
return (<button onClick={onClick}>Click Me</button>);
}
μ΄ μμμμ ChildComponentλ handleClick ν¨μμ λ‘μ§μ΄ λμΌν¨μλ λΆκ΅¬νκ³ ParentComponentκ° λ¦¬λ λλ§λ λλ§λ€ ν¨κ» 리λ λλ§λ©λλ€.
experimental_useEvent μ¬μ© ν:
import { experimental_useEvent as useEvent } from 'react';
function ParentComponent() {
const [count, setCount] = React.useState(0);
const handleClick = useEvent(() => {
setCount(count + 1);
});
return (
<ChildComponent onClick={handleClick} />
);
}
function ChildComponent({ onClick }) {
console.log("μμ μ»΄ν¬λνΈ λ λλ§λ¨");
return (<button onClick={onClick}>Click Me</button>);
}
experimental_useEventλ₯Ό μ¬μ©νλ©΄, ChildComponentλ λ€λ₯Έ propsκ° λ³κ²½λ λλ§ λ¦¬λ λλ§λμ΄ μ±λ₯μ΄ ν₯μλ©λλ€.
2. useEffect μμ‘΄μ± μ΅μ ν
useEffect ν
λ΄μμ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ¬μ©ν λ, μΌλ°μ μΌλ‘ μμ‘΄μ± λ°°μ΄μ ν΄λΉ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό ν¬ν¨ν΄μΌ ν©λλ€. μ΄λ‘ μΈν΄ μ΄λ²€νΈ νΈλ€λ¬ ν¨μκ° λ§€ λ λλ§λ§λ€ λ³κ²½λλ©΄ useEffect ν
μ΄ νμ μ΄μμΌλ‘ μμ£Ό μ€νλ μ μμ΅λλ€. experimental_useEventλ₯Ό μ¬μ©νλ©΄ μ΄λ¬ν useEffect ν
μ λΆνμν μ¬μ€νμ λ°©μ§ν μ μμ΅λλ€.
μμ:
experimental_useEvent μ¬μ© μ :
function MyComponent() {
const [data, setData] = React.useState(null);
const fetchData = async () => {
const response = await fetch('/api/data');
const data = await response.json();
setData(data);
};
const handleClick = () => {
fetchData();
};
React.useEffect(() => {
// μ΄ μ΄ννΈλ handleClickμ΄ λ³κ²½λ λλ§λ€ λ€μ μ€νλ©λλ€
console.log("μ΄ννΈ μ€ν μ€");
}, [handleClick]);
return (<button onClick={handleClick}>Fetch Data</button>);
}
experimental_useEvent μ¬μ© ν:
import { experimental_useEvent as useEvent } from 'react';
function MyComponent() {
const [data, setData] = React.useState(null);
const fetchData = async () => {
const response = await fetch('/api/data');
const data = await response.json();
setData(data);
};
const handleClick = useEvent(() => {
fetchData();
});
React.useEffect(() => {
// μ΄ μ΄ννΈλ λ§μ΄νΈ μ ν λ²λ§ μ€νλ©λλ€
console.log("μ΄ννΈ μ€ν μ€");
}, []);
return (<button onClick={handleClick}>Fetch Data</button>);
}
μ΄ κ²½μ° experimental_useEventλ₯Ό μ¬μ©νλ©΄ μ΄ννΈλ λ§μ΄νΈ μ ν λ²λ§ μ€νλμ΄ handleClick ν¨μμ λ³κ²½μΌλ‘ μΈν λΆνμν μ¬μ€νμ νΌν μ μμ΅λλ€.
3. λ³κ²½ κ°λ₯ν μν(Mutable State) μ¬λ°λ₯΄κ² μ²λ¦¬νκΈ°
experimental_useEventλ μ΄λ²€νΈ νΈλ€λ¬κ° λΆνμν 리λ λλ§μ μ λ°νμ§ μμΌλ©΄μ λ³κ²½ κ°λ₯ν λ³μ(μ: ref)μ μ΅μ κ°μ μ κ·Όν΄μΌ ν λ νΉν μ μ©ν©λλ€. μ΄λ²€νΈ νΈλ€λ¬ ν¨μκ° μ λ λ³κ²½λμ§ μκΈ° λλ¬Έμ, νμ refμ νμ¬ κ°μ μ κ·Όν μ μμ΅λλ€.
μμ:
import { experimental_useEvent as useEvent } from 'react';
function MyComponent() {
const inputRef = React.useRef(null);
const handleClick = useEvent(() => {
console.log('μ
λ ₯ κ°:', inputRef.current.value);
});
return (
<>
<input ref={inputRef} type="text" />
<button onClick={handleClick}>Log Value</button>
</>
);
}
μ΄ μμμμ handleClick ν¨μλ μ
λ ₯ κ°μ΄ μ»΄ν¬λνΈμ 리λ λλ§μ μ λ°νμ§ μκ³ λ³κ²½λλλΌλ νμ μ
λ ₯ νλμ νμ¬ κ°μ μ κ·Όν μ μμ΅λλ€.
experimental_useEvent μ¬μ© λ°©λ²
experimental_useEvent μ¬μ©λ²μ κ°λ¨ν©λλ€. κΈ°λ³Έ ꡬ문μ λ€μκ³Ό κ°μ΅λλ€:
import { experimental_useEvent as useEvent } from 'react';
function MyComponent() {
const myEventHandler = useEvent(() => {
// μ΄λ²€νΈ νΈλ€λ§ λ‘μ§μ μ¬κΈ°μ μμ±ν©λλ€
});
return (<button onClick={myEventHandler}>Click Me</button>);
}
useEvent ν
μ λ¨μΌ μΈμ, μ¦ μ΄λ²€νΈ νΈλ€λ¬ ν¨μλ₯Ό λ°μ΅λλ€. κ·Έλ¦¬κ³ λ€λ₯Έ μ»΄ν¬λνΈμ propμΌλ‘ μ λ¬νκ±°λ useEffect ν
λ΄μμ μ¬μ©ν μ μλ μμ μ μΈ μ΄λ²€νΈ νΈλ€λ¬ ν¨μλ₯Ό λ°νν©λλ€.
νκ³ λ° κ³ λ €μ¬ν
experimental_useEventλ κ°λ ₯ν λꡬμ΄μ§λ§, κ·Έ νκ³μ μ μ¬μ μΈ ν¨μ μ μΈμ§νλ κ²μ΄ μ€μν©λλ€:
1. ν΄λ‘μ ν¨μ
experimental_useEventλ‘ μμ±λ μ΄λ²€νΈ νΈλ€λ¬ ν¨μλ μ λ λ³κ²½λμ§ μκΈ° λλ¬Έμ, μ£Όμνμ§ μμΌλ©΄ ν΄λ‘μ ν¨μ μ λΉ μ§ μ μμ΅λλ€. μ΄λ²€νΈ νΈλ€λ¬κ° μκ°μ λ°λΌ λ³νλ μν λ³μμ μμ‘΄νλ κ²½μ°, μ΄λ²€νΈ νΈλ€λ¬κ° μ΅μ κ°μ μ κ·Όνμ§ λͺ»ν μ μμ΅λλ€. μ΄λ₯Ό νΌνλ €λ©΄ μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ μ΅μ μνμ μ κ·ΌνκΈ° μν΄ refλ ν¨μν μ
λ°μ΄νΈλ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
μμ:
μλͺ»λ μ¬μ©λ² (ν΄λ‘μ ν¨μ ):
import { experimental_useEvent as useEvent } from 'react';
function MyComponent() {
const [count, setCount] = React.useState(0);
const handleClick = useEvent(() => {
// μ΄ μ½λλ νμ countμ μ΄κΈ° κ°μ λ‘κ·Έλ‘ μΆλ ₯ν©λλ€
console.log('Count:', count);
});
return (<button onClick={handleClick}>Increment</button>);
}
μ¬λ°λ₯Έ μ¬μ©λ² (ref μ¬μ©):
import { experimental_useEvent as useEvent } from 'react';
function MyComponent() {
const [count, setCount] = React.useState(0);
const countRef = React.useRef(count);
React.useEffect(() => {
countRef.current = count;
}, [count]);
const handleClick = useEvent(() => {
// μ΄ μ½λλ νμ countμ μ΅μ κ°μ λ‘κ·Έλ‘ μΆλ ₯ν©λλ€
console.log('Count:', countRef.current);
});
return (<button onClick={handleClick}>Increment</button>);
}
λλ, ν¨μν μ λ°μ΄νΈλ₯Ό μ¬μ©νμ¬ μ΄μ κ°μ κΈ°λ°μΌλ‘ μνλ₯Ό μ λ°μ΄νΈν μ μμ΅λλ€:
import { experimental_useEvent as useEvent } from 'react';
function MyComponent() {
const [count, setCount] = React.useState(0);
const handleClick = useEvent(() => {
setCount(prevCount => prevCount + 1);
});
return (<button onClick={handleClick}>Increment</button>);
}
2. κ³Όλν μ΅μ ν
experimental_useEventλ μ±λ₯μ ν₯μμν¬ μ μμ§λ§, μ μ€νκ² μ¬μ©νλ κ²μ΄ μ€μν©λλ€. μ ν리μΌμ΄μ
μ λͺ¨λ μ΄λ²€νΈ νΈλ€λ¬μ λ§Ήλͺ©μ μΌλ‘ μ μ©νμ§ λ§μΈμ. μ¬λ¬ κ³μΈ΅μ μ»΄ν¬λνΈλ₯Ό ν΅ν΄ μ λ¬λκ±°λ μμ£Ό μ€νλλ useEffect ν
μμ μ¬μ©λλ λ± μ±λ₯ λ³λͺ© νμμ μΌμΌν€λ μ΄λ²€νΈ νΈλ€λ¬μ μ§μ€νμΈμ.
3. μ€νμ μν
μ΄λ¦μμ μ μ μλ―μ΄, experimental_useEventλ μμ§ Reactμ μ€νμ κΈ°λ₯μ
λλ€. μ΄λ ν₯ν APIκ° λ³κ²½λ μ μμΌλ©°, μμ μ±μ΄ μꡬλλ νλ‘λμ
νκ²½μλ μ ν©νμ§ μμ μ μμμ μλ―Έν©λλ€. νλ‘λμ
μ ν리μΌμ΄μ
μμ experimental_useEventλ₯Ό μ¬μ©νκΈ° μ μ μνκ³Ό μ΄μ μ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€.
experimental_useEvent μ¬μ©μ μν λͺ¨λ² μ¬λ‘
experimental_useEventλ₯Ό μ΅λν νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ:
- μ±λ₯ λ³λͺ© νμ μλ³: React DevToolsλ λ€λ₯Έ νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ λΆνμν 리λ λλ§μ μ λ°νλ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μλ³νμΈμ.
- λ³κ²½ κ°λ₯ν μνμ Ref μ¬μ©: μ΄λ²€νΈ νΈλ€λ¬κ° λ³κ²½ κ°λ₯ν λ³μμ μ΅μ κ°μ μ κ·Όν΄μΌ νλ κ²½μ°, refλ₯Ό μ¬μ©νμ¬ νμ¬ κ°μ μ κ·Όν μ μλλ‘ νμΈμ.
- ν¨μν μ λ°μ΄νΈ κ³ λ €: μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ μνλ₯Ό μ λ°μ΄νΈν λ, ν΄λ‘μ ν¨μ μ νΌνκΈ° μν΄ ν¨μν μ λ°μ΄νΈ μ¬μ©μ κ³ λ €νμΈμ.
- μκ² μμνκΈ°:
experimental_useEventλ₯Ό μ 체 μ ν리μΌμ΄μ μ ν λ²μ μ μ©νλ €κ³ νμ§ λ§μΈμ. λͺ κ°μ§ ν΅μ¬ μ΄λ²€νΈ νΈλ€λ¬λΆν° μμνμ¬ νμμ λ°λΌ μ μ§μ μΌλ‘ μ¬μ©μ νμ₯νμΈμ. - μ² μ ν ν
μ€νΈ:
experimental_useEventμ¬μ© ν μ ν리μΌμ΄μ μ μ² μ ν ν μ€νΈνμ¬ μμλλ‘ μλνλμ§, κ·Έλ¦¬κ³ μ΄λ€ νκ·(regression)λ λ°μνμ§ μμλμ§ νμΈνμΈμ. - μ΅μ μ 보 μ μ§: 곡μ React λ¬Έμμμ
experimental_useEventAPIμ μ λ°μ΄νΈ λ° λ³κ²½ μ¬νμ μ£ΌμνμΈμ.
experimental_useEventμ λμ
experimental_useEventλ μ΄λ²€νΈ νΈλ€λ¬ μμ‘΄μ±μ μ΅μ ννλ λ° μ μ©ν λκ΅¬μΌ μ μμ§λ§, κ³ λ €ν μ μλ λ€λ₯Έ μ κ·Ό λ°©μλ μμ΅λλ€:
1. useCallback
useCallback ν
μ ν¨μλ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ νμ€ React ν
μ
λλ€. μμ‘΄μ±μ΄ λμΌνκ² μ μ§λλ ν λμΌν ν¨μ μΈμ€ν΄μ€λ₯Ό λ°νν©λλ€. useCallbackμ μ΄λ²€νΈ νΈλ€λ¬μ μμ‘΄νλ μ»΄ν¬λνΈμ λΆνμν 리λ λλ§μ λ°©μ§νλ λ° μ¬μ©ν μ μμ΅λλ€. κ·Έλ¬λ experimental_useEventμ λ¬λ¦¬ useCallbackμ μ¬μ ν μμ‘΄μ±μ λͺ
μμ μΌλ‘ κ΄λ¦¬ν΄μΌ ν©λλ€.
μμ:
function MyComponent() {
const [count, setCount] = React.useState(0);
const handleClick = React.useCallback(() => {
setCount(count + 1);
}, [count]);
return (<button onClick={handleClick}>Increment</button>);
}
μ΄ μμμμ handleClick ν¨μλ count μνκ° λ³κ²½λ λλ§ λ€μ μμ±λ©λλ€.
2. useMemo
useMemo ν
μ κ°μ λ©λͺ¨μ΄μ μ΄μ
ν©λλ€. μ£Όλ‘ κ³μ°λ κ°μ λ©λͺ¨μ΄μ μ΄μ
νλ λ° μ¬μ©λμ§λ§, κ°λ¨ν μ΄λ²€νΈ νΈλ€λ¬λ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ λ° μ¬μ©λ μλ μμ΅λλ€. κ·Έλ¬λ μΌλ°μ μΌλ‘ μ΄ λͺ©μ μλ useCallbackμ΄ λ μ νΈλ©λλ€.
3. React.memo
React.memoλ ν¨μν μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ κ³ μ°¨ μ»΄ν¬λνΈ(HOC)μ
λλ€. propsκ° λ³κ²½λμ§ μμλ€λ©΄ μ»΄ν¬λνΈκ° 리λ λλ§λλ κ²μ λ°©μ§ν©λλ€. μμ μ»΄ν¬λνΈλ₯Ό React.memoλ‘ κ°μΈλ©΄, μ΄λ²€νΈ νΈλ€λ¬ propμ΄ λ³κ²½λλλΌλ λΆλͺ¨ μ»΄ν¬λνΈκ° 리λ λλ§λ λ μμ μ»΄ν¬λνΈκ° 리λ λλ§λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
μμ:
const MyComponent = React.memo(function MyComponent(props) {
// μ»΄ν¬λνΈ λ‘μ§
});
κ²°λ‘
experimental_useEventλ Reactμ μ±λ₯ μ΅μ ν λꡬ λͺ¨μμ μΆκ°λ μ λ§ν κΈ°λ₯μ
λλ€. μ΄λ²€νΈ νΈλ€λ¬μ μ 체μ±μ μ»΄ν¬λνΈ λ λλ§ μ£ΌκΈ°μ λΆλ¦¬ν¨μΌλ‘μ¨ λΆνμν 리λ λλ§μ λ°©μ§νκ³ React μ ν리μΌμ΄μ
μ μ λ°μ μΈ μ±λ₯μ ν₯μμν€λ λ° λμμ΄ λ μ μμ΅λλ€. κ·Έλ¬λ κ·Έ νκ³λ₯Ό μ΄ν΄νκ³ μ μ€νκ² μ¬μ©νλ κ²μ΄ μ€μν©λλ€. μ€νμ κΈ°λ₯μ΄λ―λ‘ APIμ μ
λ°μ΄νΈλ λ³κ²½ μ¬νμ λν μ 보λ₯Ό κ³μ νμΈνλ κ²μ΄ μ€μν©λλ€. μ΄κ²μ μ§μ κΈ°λ°μ κ°μΆ°μΌ ν μ€μν λκ΅¬λ‘ μκ°νλ, Reactμ API λ³κ²½μ΄ μμ μ μμΌλ©° μμ§ μ€νμ μ΄κΈ° λλ¬Έμ λλΆλΆμ νλ‘λμ
μ ν리μΌμ΄μ
μλ νμ¬ κΆμ₯λμ§ μλλ€λ μ λ μΈμ§ν΄μΌ ν©λλ€. κ·Έλ¬λ κΈ°λ³Έ μ리λ₯Ό μ΄ν΄νλ©΄ ν₯ν μ±λ₯ ν₯μ κΈ°λ₯μ λν μ΄μ μ μ»μ μ μμ΅λλ€.
μ΄ κ°μ΄λμ μ€λͺ
λ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ λμμ μ μ€νκ² κ³ λ €ν¨μΌλ‘μ¨ experimental_useEventλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νμ¬ μ±λ₯μ΄ λ°μ΄λκ³ μ μ§λ³΄μ κ°λ₯ν React μ ν리μΌμ΄μ
μ ꡬμΆν μ μμ΅λλ€. νμ μ½λμ λͺ
νμ±μ μ°μ μνκ³ λ³κ²½ μ¬νμ μ² μ ν ν
μ€νΈνμ¬ νκ·(regression)λ₯Ό λ°μμν€μ§ μμΌλ©΄μ μνλ μ±λ₯ ν₯μμ λ¬μ±νκ³ μλμ§ νμΈνλ κ²μ μμ§ λ§μΈμ.