반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리팩터링2판테스트
- react
- 리액트구글애널리틱스
- git commit 협업
- 리팩토링2판4장
- 헤드퍼스트전략패턴
- 테스트코드책
- FirebaseAnalytics
- react-ga
- cypressBDD
- git squash
- 시스템설계면접예시
- 가상면접2장
- s3이미지다운로드됨
- 가상면접3장
- 전략패턴
- 시스템설계방법
- awss3
- 시스템설계면접팁
- gitsquash
- cypress React
- 시스템설계
- Git commit 합치기
- file not found Error
- 디자인패턴
- formik react-query submitting not working
- 시스템설계면접
- formik submitting not working
- 가상면접으로대규모시스템
- git commit merge
Archives
- Today
- Total
mingg IT
[React] useState와 클로저 본문
아마 react를 이용하고 있다면 한번 쯤 useState가 어떻게 이전 값을 가지고 있는지 (유지 되는지)를 고민해본 적이 있을 것이다.
알아보니 클로저의 개념을 이용해서 작동한다.
클로저의 사용하는 이점으로는
현재 상태를 유지하면서 최신 상태를 유지할 수 있는 점이 있다.
이걸 이용해서
const useState = (initialVal) => {
let innerState = initialVal;
const state = innerState;
const setState = (newVal) => {
innerState = newVal;
};
return [state, setState];
};
const [counter, setCounter] = useState(0);
클로저가 innerState값을 기억하고 있기 때문에
console.log(counter) 를 하게 되면 0을 볼 수 있다.
리액트는 useState를 통해 생성한 상태를 접근하고 유지하기 위해서 useState메소드 바깥쪽에 state를 저장한다.
이 state들은 선언된 컴포넌트를 유일하게 구분할 수 있는 키로 접근할 수 있으며 배열 형식으로 저장된다.
따라서 useState함수 안에서 선언되는 상태들은 배열에 순서대로 저장되며, 상태가 업데이트 되었을 때, 이 상태들은 리액트 컴포넌트 바깥에 선언되어 있는 변수들이기 때문에 업데이트한 후에도 이 변수들에 접근할 수 있게 된다.
마지막으로 컴포넌트가 unmount될 때 해당 hook들을 메모리에서 제거해줘야한다.
Ref
https://ko.reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level
'FrontEnd' 카테고리의 다른 글
[Babel] Babel 예제로 공부하기(babel/cli, babel-loader) (0) | 2022.05.28 |
---|---|
[JavaScript] Promise 와 Async Await (0) | 2022.05.13 |
[React]You are running `create-react-app` 4.0.3, which is behind the latest release (5.0.1) 에러 해결하기 (0) | 2022.05.09 |
[React] CRA(create-react-app) 사용하지 않고 초기 세팅 해보기 (0) | 2022.05.08 |
[React] Typeit 사용하기 (React v 17) (0) | 2022.04.25 |
Comments