인프런 커뮤니티 질문&답변
67강 상태업데이트 강의 중 궁금한 점
작성
·
35
0
import FirstCount from "./firstCount";
import SecondCount from "./secondCount";
import { useState } from "react";
export default function Main() {
const [count, setCount] = useState(0);
const handleSetCount = () => {
setCount((prev: number) => prev + 1);
};
return (
<>
<h1>Main Component</h1>
<FirstCount count={count} setCount={handleSetCount} />
<SecondCount count={count} setCount={handleSetCount} />
</>
);
}
import type { MouseEventHandler } from "react";
interface FirstCountProps {
count: number;
setCount: MouseEventHandler<HTMLButtonElement>;
}
export default function FirstCount({ count, setCount }: FirstCountProps) {
return (
<>
<h1>firstCount Component</h1>
{count}
<button onClick={setCount}>increase</button>
</>
);
}
import type React from "react";
interface SecondCountProps {
count: number;
setCount: React.MouseEventHandler<HTMLButtonElement>;
}
export default function SecondCount({ count, setCount }: SecondCountProps) {
return (
<>
<h1>secondCount Component</h1>
{count}
<button onClick={setCount}>increase</button>
</>
);
}
맨 위에 코드가 부모컴포넌트인데 부모컴포넌트에서 증가 함수를 정의하고 그 아래에 props로 내려주는 패턴은 잘 쓰이지 않는 패턴인가요?
강의에서는 각 자식 컴포넌트에서 카운트 증가 로직이 있어서 중복되는거 같아요
그래서 부모에 하나로 정의하고 props로 내려주었는데 어느게 맞는 패턴인가요?
답변 3
1
Prop Drilling 을 배우셨나요? 부모 컴포넌트에서 자식 컴포넌트로 props를 통해 데이터를 전달하는 과정에서 데이터가 필요치 않은 중간 컴포넌트들도 해당 props를 전달 받는 패턴인데.. 좋은 패턴은 아니죠.. 그래서 가깝게는 Context API를 사용하는 방법을 배울 꺼구요.
좀 더 들어가면 커스텀 훅, 상태관리 라이브러리인 redux, zustand 사용할 겁니다.
0
안녕하세요.
우선 작성자님이 질문하신 코드의 패턴을 [Props Driling] 패턴이라고 합니다.
부모가 정의한 상태를 자식에게 내려주어서 공유하는 방식입니다.
대부분 이 방식을 평가할 때 흔히 '좋다, 나쁘다'로 이분법화해서 평가하려 합니다.
하지만 props driling 패턴은 리액트에서 가장 쉽고 흔하게 등장하는 패턴이며
상황에 따라서는 매우 좋은 방법입니다.
강의를 진행하시다보면, Props Driling을 대체할 수 있는 여러가지 방법을 더 배우실텐데
결국 다 배우시고 나서 본인 상황에서 본인이 가장 쓰기 편한 방법으로 골라서 사용하시면 됩니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. dsa02070님.
부모 컴포넌트에서 상태 업데이트 함수를 정의하고, 이를 자식 컴포넌트로 props를 통해 내려주는 패턴은 많이 사용되는 패턴입니다. 이는 상태 관리와 로직의 일관성을 유지할 수 있게 해주며, 특히 상태가 여러 컴포넌트에 걸쳐 공유될 때 매우 유용합니다.
부모에서 상태 업데이트 함수를 내려주는 장점:
일관된 상태 관리: 상태 변경 로직을 부모에 집중시켜, 여러 자식 컴포넌트가 동일한 상태를 공유하고 일관된 방식으로 업데이트할 수 있습니다.
코드 중복 제거: 여러 자식 컴포넌트가 동일한 로직을 필요로 할 때, 부모 컴포넌트에서 한 번만 정의해 공유할 수 있어 코드 중복을 줄일 수 있습니다.
유지보수 용이성: 모든 상태 변경 로직이 한 곳에 모여 있어, 나중에 로직을 수정할 때 더 쉽게 관리할 수 있습니다.
반면, 자식 컴포넌트 각각에서 상태 변경 로직을 갖는 경우 특정 컴포넌트의 구체적 요구에 맞춰 커스터마이징할 수 있는 유연성을 제공합니다. 그러나 이는 코드 중복을 초래할 수 있으며, 상태가 여러 컴포넌트에 걸쳐 공유될 때는 적합하지 않을 수 있습니다.
질문하신 내용을 더 깊이 있게 이해할 수 있는 참고 링크를 제공합니다:
- 리액트에서 상태와 props를 효율적으로 사용하는 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




