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 |
Tags
- 백준
- db수정
- 동전 0
- 프로그래머스
- 날씨 api
- 숫자를 별점으로
- 서버 컴포넌트
- 탐욕알고리즘
- server component
- 부트캠프항해
- 그리디
- 항해99후기
- 항해99솔직후기
- 로딩 후 실행
- greedy
- 자바스크립트
- 카테고리필터
- JavaScript
- 클라이언트 컴포넌트
- jQuery
- 배열 중복 제거
- react
- 중복카테고리
- 알고리즘
- 실전프로젝트
- NextJS v13
- 배열 메소드
- 중복선택
- 항해99
- 항해99추천
Archives
- Today
- Total
공부 및 일상기록
[React] state를 직접 수정하지 않고 setState를 사용하는 이유 본문
setState말고 state를 직접 변경해주면 왜 화면 갱신이 안될까?
리액트 컴포넌트은 Mount 상태에서 한번 render()를 실행하고, 후에는 Update상태에 진입하여 shouldComponentUpdate가 true 일때만 render()를 실행한다.
따라서 변경한 state가 화면에 보이게 되려면 Update상태에 들어가야 하는데 그러려면
- state 또는 props가 변경
- 부모 컴포넌트가 렌더링
- forceUpdate 사용
을 해야한다.
state가 변경되면 update가 되어야 한다고 생각이 들지만 리액트가 이 값이 변경됐다고 판단하는 기준이 객체의 메모리 주소이기 때문에 객체의 주소가 변경되지 않고 내부의 값만 바뀌면 바뀐것으로 인식을 안하기 때문이다.
따라서 setState() 함수를 이용하여 state를 변경 해야하지만, setState()함수는 비동기적으로 업데이트 되기 때문에 동기적으로 업데이트 될 수 있도록 setState()함수에 인자로 객체를 주는 것 대신 함수형으로 실행하거나 외부 라이브러리를 사용해서 상태를 업데이트 하는것이 좀 더 안정적으로 상태를 업데이트 할 수 있다.
이와 관련되서 useState가 const를 사용하는 이유도 같이 정리할 수 있다.
const [state, setState] = useState(0);
state 변수를 바꿔주는건데 왜 let이 아닐까?
- 컴포넌트가 다시 렌더링 되면 함수가 다시 실행되어 새 scope를 만들고, state변수도 새로 만들게 되고, 이는 이전 변수와 상관이 없게 된다. 따라서 const로 선언된 state변수는 동일한 scope에서 다시 할당하는 것을 막을 수 있다.
'개발 > React' 카테고리의 다른 글
[React] useRef란? (0) | 2023.01.12 |
---|---|
[React] setState는 왜 비동기 일까? (0) | 2023.01.12 |
[React] lazy loading과 code splitting (0) | 2023.01.12 |
[React] useEffect, useLayoutEffect (0) | 2023.01.12 |
[React] Props Drilling 이란? 해결법은? (0) | 2023.01.09 |