도찐개찐
[React] 중첩 객체(Nested Object)의 수정 본문
일반 state는 setState를 통해 가볍게 state 수정이 가능하지만, 아래와 같이 중첩된 state의 경우엔 setState만으로 값이 변경되지 않습니다.
this.state = {
tempList: {
List1: [],
List2: [],
List3: []
}
};
state의 List1, List2, List3 ... 같이 중첩된 객체의 state를 변경하려면, 단순 setState만으로는 한계가 있습니다.
이는 setState의 비동기성으로 인해 발생하는 상황인데,
setState와 함께 업데이트 함수를 이용하여 state 값을 변경시킬 수 있습니다.
const newList = [1, 2, 3]
this.setState(prevState => {
// Object.assign메소드로 tempList 변수를 복사
let tempList = Object.assign({}, prevState.tempList);
// tempList의 List1 속성을 바꾸고자 하는 상태(newList)로 업데이트
tempList.List1 = newList;
// 새로운 tempList 객체를 리턴
return { tempList };
})
아래처럼 사용할 수도 있습니다.
this.setState(prevState => ({
tempList: {
// tempList의 이전 상태를 모두 복사 후
...prevState.tempList,
// 변경하고자 하는 key값(여기서는 List1)만 업데이트한다.
List1: newList
}
}))
결과적으로 state는 아래와 같은 상태가 됩니다.
this.state = {
tempList: {
List1: newList,
List2: [],
List3: []
}
};
728x90
'React' 카테고리의 다른 글
[React] JWT 프론트 로그인 처리 하기 (0) | 2022.05.08 |
---|---|
[React] 실행 포트 변경 (0) | 2022.05.03 |
[React] Fragment 사용하기 (0) | 2022.04.28 |
[React] useState VS useEffect (0) | 2022.04.28 |
[React] PureComponent VS Component (0) | 2022.04.28 |
Comments