일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- nest.js circular Dependency
- HTML
- 리액트 테스트 코드
- mock api를 이용한 react 테스트
- React Testing Library
- TodoList 테스트 코드
- react jest
- javascript 테스트
- ScrollView 무한 스크롤
- nest.js forwardRef
- 프로젝트 배포하기
- 비동기 테스트
- 첫코딩
- 리액트 테스트
- react native 무한스크롤
- 개발
- React 테스트코드
- react testing library 비동기 테스트 사용법
- Testing-library/react
- TDD방식으로 리액트 테스팅
- nest.js 순환 종속성
- CSS
- JavaScript
- nest.js 순환 참조
- 첫 코딩
- react 테스트
- react
- jest
- mock api 사용법
- FlatList 무한 스크롤
- Today
- Total
성장을 위한 기록
리액트(react) useState를 사용하는 이유, 주의 사항 본문
useState
데이터를 state로 관리하기 위해 사용하는 방법이다.
나도 처음엔 의문이 들었다.
함수형 컴포넌트에서 state를 사용하지 않아도 충분히 변수를 만들고 값을 넣을 수 있는데, 왜 사용해야하나?
이유는 리렌더링을 위해서이다.
렌더링의 조건은 여러가지가 있다
- state가 변경되었을 때
- props가 변경되었을 때
- 부모 컴포넌트가 리렌더링 되었을 때
- 강제로 리렌더링 했을 때 (forceUpdate)
우린 여기서 1번 state가 바꼈을 때를 봐야한다.
state를 변경한다는 것은. 단순히 어떤 변수값이 변경했다고 리액트에서 state 변경으로 인식한다는 의미가 아니다.
아마 모든 변수가 변경될 때 마다 리렌더링 된다면 js 코드를 작성하지 못할 것이다.
따라서 우리는 데이터 값이 변경되면 그에 맞게 리렌더링을 하기 위해 데이터를 state 상태로 관리한다.
useState 사용법
const [변수명 , 변수를 변경할 함수 명] = useState(초기 값)
//ex const [age, setAge] = useState(30)
그리고 age를 변수로 사용하면 된다. age값이 변경될 경우 리렌더링이 되면서 바뀐 데이터가 적용된 부분을 렌더링하게 된다.
여기서 중요한 부분은 const로 선언하는 것과, setAge(변경할 함수)로 값이 변경해야 한다는 점이다 .
우선 const로 선언하는 이유가 2번째 이유와 비슷하게 변수 재할당을 통해 변수 값을 변경시키는 행위를 막기 위해서이다.
let[age, setAge] = useState(30)
age = 40
console.log(age) >> 40
setAge(50)
console.log(age) >> 40
이렇게 let으로 선언하면 재 할당이 가능한데 문제가 하나 있다.
setAge로 변경하는 값이 적용되지 않는 다는 점이다. 만일 이런 상황이 된다면 데이터가 쌓여 예상치 못한 오류를 범할 수 있고 state관리를 하기 어려워진다.
또한 이런 재할당 방식은 리액트가 state 변경을 인지하지 못하고, 렌더링하지 않는다.
따라서 우리는 원하는 동적 움직임을 보여줄 수 없게 된다.
결론.
꼭 setAge를 통해 변수를 변경하여 state가 변경된 사실을 리액트가 알 수 있게 해야하며, 그에 따라 렌더링이 되도록 하는 것이 바람직하다.
'FE (Front End) (구) > React' 카테고리의 다른 글
React(리액트)에서 meta 태그 사용하기 (helmet) (0) | 2022.06.07 |
---|---|
React (리액트) 커스텀 훅 사용하기 간단 예제 (0) | 2022.06.03 |
리액트 기초 1탄 Props 전달 방법, JSX 규칙 (0) | 2022.05.30 |
React - Redux 기초 개념 정리 (0) | 2022.05.28 |
리액트 상태관리 Context API, Redux, React Query (0) | 2022.05.24 |