React 리액트 - 중첩 객체의 state 변경
2021. 2. 20. 23:43ㆍFrontend/React
리액트 - 중첩된 객체 state 변경하기
일반 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: []
}
};
'Frontend > React' 카테고리의 다른 글
React - netlify로 배포하기 (feat. github) (1) | 2021.05.26 |
---|---|
redux tutorial (0) | 2021.04.29 |
setState의 비동기성으로 생기는 문제 (0) | 2021.02.05 |
[React tutorial] 배열 객체 렌더링하기 (입문) (0) | 2020.11.10 |
[Nomad coders] React - JSX, props (0) | 2020.11.08 |