리액트에서 props drilling은 부모 컴포넌트에서 자식 컴포넌트로 props
를 통해 데이터를 전달하는 과정에서, 그 데이터를 실제로 필요로 하지 않는 중간 컴포넌트들이 해당 props
를 단순히 전달하기 위해 포함되는 패턴을 말합니다. 이 현상은 트리 구조가 깊어질수록 더욱 복잡해질 수 있으며, 관리가 어려워지고 코드의 유지보수가 힘들어집니다.
예를 들어, 최상위 부모 컴포넌트가 3단계 아래의 자식 컴포넌트에 데이터를 전달하고자 할 때, 중간의 2개의 컴포넌트들은 그 데이터를 사용하지 않더라고 단순히 props
로 전달해야 합니다.
최상위 부모 컴포넌트와 3단계 아래의 자식 컴포넌트 사이에 있는 컴포넌트들이 그 데이터를 불필요하게 포함하게 됩니다. 이러한 구조는 컴포넌트가 많아질수록 비효율적입니다.
Props drilling이 발생하는 예시를 보겠습니다.
const GrandParent = () => {
const data = '전달할 데이터';
return <Parent data={data} />;
};
const Parent = ({ data }) => {
return <Child data={data} />;
};
const Child = ({ data }) => {
return <div>{data}</div>;
};
data
는 GrandParent
에서 생성되어 Child
로 전달되지만, Parent
는 data
를 사용하지 않음에도 단순히 전달하기 위해 포함되어야 합니다.
props
를 받게 됨으로써 코드의 복잡성이 증가합니다.✅ 참고