개발자

객체 depth가 깊은 경우 ... 연산자로 복사하면 안좋나요?

2024년 07월 03일조회 57

안녕하세요. react를 공부 중인 초보자입니다. 현재 recoil 사용하여 recoil state에 객체로 state를 사용하고 있습니다. 그런데 input에서 onChange 이벤트로 state를 변경할 때, 객체의 depth가 깊다면 ... 연산자로 복사하면서 가는게 안좋나요? 예를들어 setState(prev => ({ ...prev, [name]: { ...prev[name], data: { ...prev[name].data, value: value } }, })); 이런 식으로 update 할 경우 ... 연산이 너무 많아져서 비효율적 인가요? 해당 input의 data가 다른 페이지에서 사용 되진 않고 다른 페이지를 갔다 와도 (컴포넌트 이동) 입력된 정보가 남아 있도록 recoil state에 관리하고 있습니다. 초보적인 입장에서 input에 입력 할 때마다 이렇게 하는 건 손해 같아서, input value를 컴포넌트에서 ref로 따로 관리를 하고, useEffect에서 clenup 으로 한번만 setState 하는 방식이 어떨까 하는 의문이 생깁니다. 객체 깊이가 깊어 ... 연산이 많아지는 경우 onChange에서 관리하면 성능적으로도, 클린 코드 (가독성) 면에서도 별로 일까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

포크코딩님의 프로필 사진

setState에 넘겨주는 콜백 함수에서 …연산자를 많이 쓰는 것이 고민으로 보입니다. 콜백 함수 전에 지역변수를 하나 선언하셔서, 이전 상태를 …연산자로 복사한 다음 재활용하세요. 그러면 여러번 … 쓸 필요가 없습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 07월 03일

`...` spread 연산자를 사용해서 객체나 배열을 복사하는 것은 JavaScript에서 흔히 볼 수 있는 패턴이지만, 객체의 depth가 깊어질수록 그 효율성에는 문제가 있습니다. 첫 번째로, 매번 비파괴적인 업데이트를 하기 위해 전체 객체를 복사하면 메모리 사용량이 증가하고 이로 인해 성능에 영향을 줄 수 있습니다. 두 번째로, 코드의 가독성 면에서도 깊은 레벨을 가진 객체를 업데이트 하기 위한 `...` 연산자의 사용은 코드를 점점더 중복되고 복잡하게 만들 수 있습니다. 추천드리는 방법 중 하나는 Immutable.js와 같은 라이브러리를 사용하여 불변성을 유지하는 것입니다. 이러한 라이브러리는 데이터 구조를 효율적으로 관리할 수 있게 도와줍니다. 다른 방법으로 리액트 컴포넌트에서 useRef와 useEffect를 활용하는 것도 좋은 선택입니다. useRef hook을 사용하여 현재 값을 추적하고, useEffect cleanup 함수 내부에서 한 번만 상태 업데이트 로직을 실행하는 방식으로 객체의 변경 사항들을 한 번에 처리할 수 있습니다. 하지만 이러한 접근 방식은 상황에 따라 다르므로, 프로젝트의 요구 사항과 성능 측정 결과를 기반으로 최선의 안을 선택하는 것이 중요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!