const [a,b, ...arr] = retArrayFunction( );
a = 1
b = 2
arr = (2) [3,4]
update를 판단할 때 주의할점 (참고: deep vs shallow)
primitive type인 경우 값까지 비교
reference type인 경우 참조까지만 비교
→ primitive type 값을 사용할 때는 setter함수 통해서 값을 바꿔주면되고,
reference type 값은 setter함수에 추가로 reference까지 바뀌도록 작성해야한다.
import React from 'react';
const App = () => {
const [result, setResult] = React.useState(0);
return (
<>
<input type='number' />
+
<input type='number' />
=
<input type='number' disabled value={result} />
<button type='button'>계산</button>
</>
);
}
export default App;
const App = () => {
const [result, setLeft] = React.useState(0);
const [result, setRight] = React.useState(0);
const [result, setResult] = React.useState(0);
return (
<>
<input type='number' onChange={(e) => setLeft(parseInt(e.target.value, 10))} />
+
<input type='number' onChange={(e) => setRight(parseInt(e.target.value, 10))} />
=
<input type='number' disabled value={result} />
<button type='button' onClick={() => setResult(left + right)}>계산</button>
</>
);
}
const App = () => {
const [num, setNum] = React.useState(1);
return (
<div>
<div>{num}</div>
<button
type="button"
onClick={() => {
setNum(num + 1);
setNum(num + 1);
setNum(num + 1);
}}
>
+3
</button>
</div>
);
}
onClick={() => {
setNum(prev => prev + 1);
setNum(prev => prev + 1);
setNum(prev => prev + 1);
}}
const [변수명, set함수명] = useState(초기값);
useEffect(() => {
// 컴포넌트가 마운트 된 이후,
// 의존성 배열에 있는 변수들 중 하나라도 값이 변경되었을 때 실행
// 의존성 배열에 빈 배열[]을 넣으면 마운트와 언마운트시에 단 한 번씩만 실행됨
// 의존성 배열 생략 시 컴포넌트 업데이트 시마다 실행됨
...
return () => {
// 컴포넌트가 마운트 해제되기 전 실행됨
}
}, [의존성 변수1, 의존성 변수2, ...]);