도찐개찐

[React] 중첩 객체(Nested Object)의 수정 본문

React

[React] 중첩 객체(Nested Object)의 수정

도개진 2022. 4. 29. 09:16

일반 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: []
            }
        };

 

 

출처 : https://junior-datalist.tistory.com/70

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