티스토리 뷰
함수형 컴포넌트를 실무에 적용하여 개발을 진행 중인데, 로컬 변수를 사용에 있어 문제가 발생했습니다.
기존 클래스 형의 함수에서 사용했던 것처럼 let, const 등의 키워드로 변수를 선언 할당하여 사용했는데, 처음 한 번은 정상이나, 한번 이상 렌더링 되면 값이 초기화되어 계산 로직에서 잘못된 값이 나왔습니다.
원인을 파악해보고자 간단한 예시를 만들었습니다.
maxMn, minMn의 두 로컬 변수를 만들고 초기값을 할당한 후, 계산식을 탈 때 두 값을 찍어주도록 해봤습니다.
1. 내 코드의 문제점
useEffect를 통해 변수에 값을 할당 후 계산식에서 처음 사용 시에는 정상이나 두 번째(렌더링이 일어난 후)부터는 0으로 초기화되는 현상을 볼 수 있습니다.
원인을 파악하기 위해 함수 컴포넌트 최상단에 디버거를 찍어두고 실행을 해 보니 함수 컴포넌트는 결국 함수이기 때문에 컴포넌트 내 코드 블록 전체가 계속 반복적으로 호출된다는 것을 알았습니다. 따라서 로컬의 변수나 함수 등은 매번 새로 생성과 할당을 하게 됩니다.
이를 해결하기 위해 인터넷을 검색해보니 useRef의 컴포넌트에서 특정 DOM 을 선택해야 할 때 사용하는 이외의 또 다른 용도가 있음을 찾았습니다. 이는 아래와 같습니다.
- 컴포넌트 안에서 조회 및 수정 할 수 있는 변수 관리
- useRef로 관리되는 변수는 값이 바뀌어도 컴포넌트가 리렌더링 되지 않음
- useRef로 만들어진 객체는 React가 만든 전역 저장소에 저장되어 함수를 재 호출해도 마지막 업데이트한 current 값이 유지
2. 개선
위와 같이 useRef 훅을 사용하여 로컬 변수를 선언하고 사용 할 수 있었습니다. 클래스 형보다 신경 써야 할 부분이 있지만, 가독성 있게 코딩하면 추후에 유지보수 하기에도 더 편할 것 같습니다.
useRef를 통한 로컬 변수 사용 시 주의해야할 점은 아래와 같습니다.
- useRef를 사용 할 때 파라미터를 넣어 초기화해주면, 이 값이. current 값으로 할당
- 값을 수정하고자 할땐 .current 로 할당 필요
- 값을 조회하고자 할땐 .current 로 조회 필요
함수형 컴포넌트로 코딩을 해보니 편한점이 많지만, 아직 배울 점도 많은 것 같다! 클래스형 컴포넌트에 대해서는 이미 어느 정도 잘 알고 있으니, 함수형 컴포넌트도 더 많이 사용해보면서 빨리 익숙해져야겠다!
'JavaScript > React' 카테고리의 다른 글
React - 상태관리 zustand - devtools (0) | 2022.05.19 |
---|---|
React - 상태관리 zustand - 기초 (0) | 2022.05.17 |
React - ClassComponent 라이프 사이클 (0) | 2022.04.27 |
React - ClassComponent 전역변수 (1) | 2022.04.25 |
React - FunctionalComponent. Hook? (0) | 2022.04.19 |
- Total
- Today
- Yesterday
- next.js에 .gitignore가 적용되지 않을 때
- 타입스크립트
- next.js 환경변수
- 목표 일기
- redirects
- 1급 객체
- 호이스팅
- 자바스크립트 동작원리
- Next.js
- 함수형 컴포넌트
- React로 쓰로틀링 디바운싱 구현
- useRef
- 매겨변수와 인자
- 렌더링 속도 개선
- Virtual Scroll
- 자바스크립트 비동기 동작원리
- 1급 시민
- rewrites
- 시맨틱 웹
- 1급 함수
- array
- redux
- programmers
- react
- vue
- 가상스크롤
- zustand
- typescript
- debouncing
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |