반응형
//함수 시그니처 interface ModalProps { setIsModalOpen: (isOpen: boolean) => void; } // setState interface ModalProps { setIsModalOpen: React.Dispatch<React.SetStateAction<boolean>> }
두 타입은 비슷해 보이지만 중요한 차이점이 있다. 사용 의도와 동작에 따라 적합한 상황이 나뉘며, 아래에서 각각의 의미를 설명하겠다.
1. setIsModalOpen: (isOpen: boolean) => void
이 타입은 함수 시그니처를 정의한다. setIsModalOpen
은 단순히 boolean
값을 받아서 특정 작업을 수행하는 함수이다.
예시:
const handleModalToggle = (isOpen: boolean) => { console.log(`Modal is now ${isOpen ? "open" : "closed"}`); };
사용 시나리오:
- 값을 단순히 업데이트하거나 전달만 할 때 유용하다.
useState
가 아닌 다른 방식으로 상태를 관리하거나, 외부에서 상태 관리 로직이 구현된 경우 자주 사용된다.- 함수 내부에서 상태 변경 외 추가 로직을 처리해야 할 때.
예제 코드:
type Props = { setIsModalOpen: (isOpen: boolean) => void; }; const ModalToggleButton: React.FC<Props> = ({ setIsModalOpen }) => ( <button onClick={() => setIsModalOpen(true)}>Open Modal</button> );
2. setIsModalOpen: React.Dispatch<React.SetStateAction<boolean>>
이 타입은 useState
의 상태 변경 함수를 그대로 사용하는 경우에 해당한다. React의 상태 관리에서 setState
함수는 React.Dispatch<React.SetStateAction<T>>
타입을 가진다.
특징:
setIsModalOpen
이boolean
값 자체 또는boolean
값을 반환하는 함수(즉, 업데이트 로직)를 받을 수 있다.- 이를 통해 상태 업데이트 방식을 더 유연하게 처리할 수 있다.
예시:
const [isModalOpen, setIsModalOpen] = useState(false); // setState를 그대로 Prop으로 전달 <ModalToggleButton setIsModalOpen={setIsModalOpen} />; const ModalToggleButton = ({ setIsModalOpen }: { setIsModalOpen: React.Dispatch<React.SetStateAction<boolean>> }) => { return ( <button onClick={() => setIsModalOpen((prev) => !prev)}>Toggle Modal</button> ); };
사용 시나리오:
- React 상태 관리에 최적화된 방식으로,
useState
의 상태 변경 함수를 그대로 Prop으로 전달하려는 경우 사용한다. useState
에서 제공하는 업데이트 함수와 현재 상태를 기반으로 값 계산이 필요할 때 유용하다.
주요 차이점
구분 | (isOpen: boolean) => void |
React.Dispatch<React.SetStateAction<boolean>> |
---|---|---|
역할 | 단순히 boolean 값을 받아 처리하는 일반 함수 |
useState 와 동일한 상태 변경 함수 |
유연성 | 단순히 새로운 값을 설정해야 할 때 적합 | 현재 상태를 기반으로 새 값을 계산하거나 업데이트할 때 유리 |
함수 호출 방식 | setIsModalOpen(true) |
setIsModalOpen((prev) => !prev) |
React와의 결합 | React 상태 관리와 직접적 연결 없음 | React 상태 관리(useState )와 밀접한 연결 |
결론
(isOpen: boolean) => void
: 단순히 값을 설정하거나 비즈니스 로직이 Prop으로 전달된 함수에 포함되어야 하는 경우.React.Dispatch<React.SetStateAction<boolean>>
:useState
상태 변경 함수를 Prop으로 전달할 때 사용.
상황에 따라 적합한 방식을 선택하세요!
반응형