반응형
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 |
Tags
- 동적 프로그래밍
- 커밋메시지
- Upstream
- webhacking
- 알고리즘
- 우아한테크코스
- 예술의 전당
- 자바
- 네트워크 계층
- Dreamhack
- c
- 서울청년문화패스
- linux
- 다이나믹 프로그래밍
- jsx
- 비동기 처리
- 애플리케이션 계층
- 위상 정렬
- 트랜스포트 계층
- 웹개발
- 선우예권
- 진입차수
- 깃헙
- 코리안챔버오케스트라
- 깃
- 우테코
- 프리코스
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- React
- 백엔드
Archives
- Today
- Total
yon11b
React- state 변경 feat. 불변성 본문
반응형
교내 소프트웨어융합대학 학술제에서 프론트를 맡아서 공부한 것들을 정리해보았다.
불변성
let array=[1,2,3,4] //메모리 영역1
array.push(5) //메모리 영역1. 원본 데이터 수정 -> 불변성 지켜주지 x
arrya=[1,2,3,4] //메모리 영역2=> 새로운 배열 할당.
불변성: 메모리 영역에서 값을 변경할 수 없다!!
왜 리엑트에서 불변성을 지켜야 하나?
상태 업데이트 원리 때문!
react는 상태값을 업데이트 할 때 얕은 비교를 수행한다. 객체의 속성 하나하나를 비교하는 게 아니라 참조값만 비교하여 상태 변화를 감지한다. 이런 이유로 배열이나 객체를 업데이트할 떄 setState([..state,newState]) 와 같이 배열이나 객체를 새로 생성⇒새로운 참조값 생성⇒ 상태 업데이트 를 한다.
이런 행위가 불변성을 지켜주는 것이다. 이렇게 불변성을 지켜줌으로써 얻게 되는 이점
- 사이드 이펙트 방지
어떻게 불변성을 지키는가?
spread operator, map, filter, slice, reduce 등등 새로운 배열을 반환하는 메소드들을 활용하면 된다.
(splice는 원본데이터를 변경함)
setState를 이용할 때 원시타입인 경우에는 값을 바로 넣어주어도 되지만 참조타입인 경우에는 새로운 객체나 배열을 생성한 후 값을 넣어주어야 한다.
원시타입: 숫자, 문자열, 논리형, null, Undefined
참조타입: 함수, 배열, 객체
// 원시타입
const [number, setNumber]=useState(0)
setState(3)
// 참조타입
const [person, setPerson]=useState({name:'',age:30})
setState({...person,name:'yon11b'})
배열 값 추가하기
배열 값을 변경할 때는 객체와 마찬가지로 불변성을 ****지켜주어야 한다.
배열의 불변성을 지키면서 원소가 추가된 새로운 배열을 만드는 방법
…inputs 과 같은 스프레드 함수 사용
setUsers([...users, user]);
concat
setUsers((users.concat(user));
참고
728x90
'개발 > 웹개발' 카테고리의 다른 글
React- API연결하기 (fetch) + const에서 async 쓰는 방법 (0) | 2022.12.21 |
---|---|
React- export 와 default export (0) | 2022.12.21 |
React- key 사용 (0) | 2022.10.06 |
React-JSX란? (0) | 2022.10.06 |
React- 기본개념 (0) | 2022.10.06 |