티스토리 뷰
Reack Hook useState 함수
컴포넌트가 렌더링 될 때 const 가 재할당되는것 처럼 보이지만
실제로는 useState 함수에서 초기 여부를 검사하여 전역적으로 setter에 값을 유지한다
아주 간단한 예제인 카운터를 들어보면
import React, { useState } from 'react';
function Counter() {
const [number, setNumber] = useState(0);
const onIncrease = () => {
setNumber(prevNumber => prevNumber + 1);
}
const onDecrease = () => {
setNumber(prevNumber => prevNumber - 1);
}
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
아래 부분을 보면 const 로 할당하고 있는데, 어떻게 setNumber를 통해서 계속 number의 값이 바뀌는지
궁금할 수 있다.
const [number, setNumber] = useState(0);
실제로 리액트에서 컴포넌트가 렌더링되면 const를 재사용하는 것이 아니라 함수(컴포넌트)를 다시 호출하기 때문에
아래처럼 동작하게 된다.
실제로 Hook은 훨씬 정교하며 이와 같이 구현되지는 않지만 비슷한 동작을 보여주기위해서 개념을 설명하면
다음과 같이 이해하면 된다.
let _state;
let _initialized = false;
function useState(initialValue) {
if (!_initialized) {
_state = initialValue;
_initialized = true;
}
return [_state, v => _state = v];
}
function Component() {
const [count, setCount] = useState(0);
console.log(count);
setCount(count + 1);
}
Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender
source) https://stackoverflow.com/questions/58860021/why-react-hook-usestate-uses-const-and-not-let
'■ 프론트엔드 ■ > React' 카테고리의 다른 글
ESLint, Prettier, ESLint-plugin, ESLint-config, jsconfig.json (0) | 2020.06.15 |
---|---|
react hooks : usecallback and usememo (0) | 2020.06.15 |
create react app => yarn build path 설정 (0) | 2020.06.09 |
React Hook useReducer (0) | 2020.06.03 |
React 시작하기 CDN 으로 연결하여 처음 사용해보기 (1) | 2019.03.07 |
댓글