Skip to content

Commit a4446ad

Browse files
committed
update post
1 parent 9c17af8 commit a4446ad

File tree

4 files changed

+134
-0
lines changed

4 files changed

+134
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
---
2+
tags:
3+
- resource
4+
- react
5+
createdAt: 2025-04-20 10:03:21
6+
modifiedAt: 2025-04-20 23:26:54
7+
publish: resource/React
8+
related: ""
9+
series: ""
10+
---
11+
12+
# Props Drilling 이란 무엇인가
13+
14+
Props Drilling은 React와 같은 컴포넌트 기반 프레임워크에서 발생하는 **패턴**으로,상위 컴포넌트에서 깊이 중첩된 하위 컴포넌트로 데이터(props)를 전달하기 위해 중간에 있는 여러 컴포넌트들을 통과시키는 과정을 말한다.
15+
16+
## 작동 방식
17+
18+
예를 들어 다음과 같은 컴포넌트 구조가 있다고 가정해보자
19+
20+
```xml
21+
App
22+
└── Parent
23+
└── Child
24+
└── GrandChild
25+
└── GreatGrandChild
26+
```
27+
28+
만약 `App`컴포넌트에서 `GreatGrandChild`컴포넌트로 데이터를 전달해야 한다면, 그 데이터는 `Parent`,`Child`,`GrandChild`를 거쳐야 한다. 이때 중간에 이쓴ㄴ 컴포넌트들은 해당 데이터를 실제로 사용하지 않고 단순히 하위 컴포넌트로 전달만 하는 역할을 한다.
29+
30+
```jsx
31+
jsxfunction App() {
32+
const data = "Hello from App";
33+
return <Parent data={data} />;
34+
}
35+
36+
function Parent({ data }) {
37+
return <Child data={data} />;
38+
}
39+
40+
function Child({ data }) {
41+
return <GrandChild data={data} />;
42+
}
43+
44+
function GrandChild({ data }) {
45+
return <GreatGrandChild data={data} />;
46+
}
47+
48+
function GreatGrandChild({ data }) {
49+
return <div>{data}</div>;
50+
}
51+
```
52+
53+
위 예제에서 `Parent`,`Child`,`GrandChild`컴포넌트는 `data` prop을 사용하지 않고 단순히 다음 컴포넌트로 전달만 한다. 이것이 바로 Props Drilling이다.
54+
55+
## 문제점
56+
57+
1. 코드 복잡성 증가: 중간 컴포넌트들이 불필요한 props를 관리해야 하므로 코드가 복잡해진다.
58+
2. 유지보수 어려움: props의 변경이 필요할 때 관련된 모든 컴포넌트를수정해야한다.
59+
3. 컴포넌트 재사용성 저하: 특정 데이터에 의존하게 되어 컴포넌트의 재사용성이 떨어진다.
60+
4. 디버깅 어려움: 데이터 흐름을 추적하기 어려워 문제 발생 시 디버깅이 복잡해진다.
61+
62+
## 해결 방법
63+
64+
1. ContextAPI: React의 Context API를 사용하면 중간 컴포넌트를 거치지 않고 직접 데이터를 전달할 수 있다.
65+
66+
```jsx
67+
const DataContext = React.createContext();
68+
69+
function App() {
70+
const data = "Hello from App";
71+
return (
72+
<DataContext.Provider value={data}>
73+
<Parent />
74+
</DataContext.Provider>
75+
);
76+
}
77+
78+
// 중간 컴포넌트들은 데이터를 전달하지 않아도 됨
79+
function Parent() {
80+
return <Child />;
81+
}
82+
83+
function Child() {
84+
return <GrandChild />;
85+
}
86+
87+
function GrandChild() {
88+
return <GreatGrandChild />;
89+
}
90+
91+
function GreatGrandChild() {
92+
const data = React.useContext(DataContext);
93+
return <div>{data}</div>;
94+
}
95+
```
96+
97+
2. 상태 관리 라이브러리: Redux, Recoil, MobX 같은 상태 관리 라이브러리를 사용하여 전역 상태를 관리할 수 있다.
98+
99+
3. Composition(합성): 컴포넌트 합성을 통해 props drilling을 피할 수 있다.
100+
101+
```jsx
102+
function App() {
103+
const data = "Hello from App";
104+
return (
105+
<Parent>
106+
<GreatGrandChild data={data} />
107+
</Parent>
108+
);
109+
}
110+
111+
function Parent({ children }) {
112+
return <div>{children}</div>;
113+
}
114+
115+
function GreatGrandChild({ data }) {
116+
return <div>{data}</div>;
117+
}
118+
```

public/link-map.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"0.inbox/Props Drilling 이란 무엇인가.md": "resource/React/Props Drilling 이란 무엇인가",
23
"3.resource/SWEA강의/SWEA 강의 정리노트.md": "자원/SWEA 강의 정리노트/SWEA 강의 정리노트",
34
"3.resource/Javascript/변수의 선언,초기화,할당의 차이점은 무엇인가.md": "자원/JavaScript/변수의 선언,초기화,할당의 차이점은 무엇인가",
45
"3.resource/Javascript/호이스팅(Hoisting)이란 무엇인가.md": "자원/JavaScript/호이스팅(Hoisting)이란 무엇인가",

public/meta-data.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11
[
2+
{
3+
"urlPath": "resource/React/Props Drilling 이란 무엇인가",
4+
"title": "Props Drilling 이란 무엇인가",
5+
"summary": "",
6+
"image": "",
7+
"tags": ["resource", "react"],
8+
"series": "",
9+
"createdAt": "2025-04-20 10:03:21",
10+
"modifiedAt": "2025-04-20 23:26:54",
11+
"publish": "resource/React"
12+
},
213
{
314
"urlPath": "자원/SWEA 강의 정리노트/SWEA 강의 정리노트",
415
"title": "SWEA 강의 정리노트",
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"content": "\n# Props Drilling 이란 무엇인가\n\nProps Drilling은 React와 같은 컴포넌트 기반 프레임워크에서 발생하는 **패턴**으로,상위 컴포넌트에서 깊이 중첩된 하위 컴포넌트로 데이터(props)를 전달하기 위해 중간에 있는 여러 컴포넌트들을 통과시키는 과정을 말한다.\n\n## 작동 방식\n\n예를 들어 다음과 같은 컴포넌트 구조가 있다고 가정해보자\n\n```xml\nApp\n└── Parent\n └── Child\n └── GrandChild\n └── GreatGrandChild\n```\n\n만약 `App`컴포넌트에서 `GreatGrandChild`컴포넌트로 데이터를 전달해야 한다면, 그 데이터는 `Parent`,`Child`,`GrandChild`를 거쳐야 한다. 이때 중간에 이쓴ㄴ 컴포넌트들은 해당 데이터를 실제로 사용하지 않고 단순히 하위 컴포넌트로 전달만 하는 역할을 한다.\n\n```jsx\njsxfunction App() {\n const data = \"Hello from App\";\n return <Parent data={data} />;\n}\n\nfunction Parent({ data }) {\n return <Child data={data} />;\n}\n\nfunction Child({ data }) {\n return <GrandChild data={data} />;\n}\n\nfunction GrandChild({ data }) {\n return <GreatGrandChild data={data} />;\n}\n\nfunction GreatGrandChild({ data }) {\n return <div>{data}</div>;\n}\n```\n\n위 예제에서 `Parent`,`Child`,`GrandChild`컴포넌트는 `data` prop을 사용하지 않고 단순히 다음 컴포넌트로 전달만 한다. 이것이 바로 Props Drilling이다.\n\n## 문제점\n\n1. 코드 복잡성 증가: 중간 컴포넌트들이 불필요한 props를 관리해야 하므로 코드가 복잡해진다.\n2. 유지보수 어려움: props의 변경이 필요할 때 관련된 모든 컴포넌트를수정해야한다.\n3. 컴포넌트 재사용성 저하: 특정 데이터에 의존하게 되어 컴포넌트의 재사용성이 떨어진다.\n4. 디버깅 어려움: 데이터 흐름을 추적하기 어려워 문제 발생 시 디버깅이 복잡해진다.\n\n## 해결 방법\n\n1. ContextAPI: React의 Context API를 사용하면 중간 컴포넌트를 거치지 않고 직접 데이터를 전달할 수 있다.\n\n```jsx\nconst DataContext = React.createContext();\n\nfunction App() {\n const data = \"Hello from App\";\n return (\n <DataContext.Provider value={data}>\n <Parent />\n </DataContext.Provider>\n );\n}\n\n// 중간 컴포넌트들은 데이터를 전달하지 않아도 됨\nfunction Parent() {\n return <Child />;\n}\n\nfunction Child() {\n return <GrandChild />;\n}\n\nfunction GrandChild() {\n return <GreatGrandChild />;\n}\n\nfunction GreatGrandChild() {\n const data = React.useContext(DataContext);\n return <div>{data}</div>;\n}\n```\n\n2. 상태 관리 라이브러리: Redux, Recoil, MobX 같은 상태 관리 라이브러리를 사용하여 전역 상태를 관리할 수 있다.\n\n3. Composition(합성): 컴포넌트 합성을 통해 props drilling을 피할 수 있다.\n\n```jsx\nfunction App() {\n const data = \"Hello from App\";\n return (\n <Parent>\n <GreatGrandChild data={data} />\n </Parent>\n );\n}\n\nfunction Parent({ children }) {\n return <div>{children}</div>;\n}\n\nfunction GreatGrandChild({ data }) {\n return <div>{data}</div>;\n}\n```\n",
3+
"plainContent": "Props Drilling은 React와 같은 컴포넌트 기반 프레임워크에서 발생하는 패턴으로,상위 컴포넌트에서 깊이 중첩된 하위 컴포넌트로 데이터(props)를 전달하기 위해 중간에 있는 여러 컴포넌트들을 통과시키는 과정을 말한다.\n예를 들어 다음과 같은 컴포넌트 구조가 있다고 가정해보자\n만약 App컴포넌트에서 GreatGrandChild컴포넌트로 데이터를 전달해야 한다면, 그 데이터는 Parent,Child,GrandChild를 거쳐야 한다. 이때 중간에 이쓴ㄴ 컴포넌트들은 해당 데이터를 실제로 사용하지 않고 단순히 하위 컴포넌트로 전달만 하는 역할을 한다.\n위 예제에서 Parent,Child,GrandChild컴포넌트는 data prop을 사용하지 않고 단순히 다음 컴포넌트로 전달만 한다. 이것이 바로 Props Drilling이다.\n1. 코드 복잡성 증가: 중간 컴포넌트들이 불필요한 props를 관리해야 하므로 코드가 복잡해진다.\n2. 유지보수 어려움: props의 변경이 필요할 때 관련된 모든 컴포넌트를수정해야한다.\n3. 컴포넌트 재사용성 저하: 특정 데이터에 의존하게 되어 컴포넌트의 재사용성이 떨어진다.\n4. 디버깅 어려움: 데이터 흐름을 추적하기 어려워 문제 발생 시 디버깅이 복잡해진다.\n1. ContextAPI: React의 Context API를 사용하면 중간 컴포넌트를 거치지 않고 직접 데이터를 전달할 수 있다.\n2. 상태 관리 라이브러리: Redux, Recoil, MobX 같은 상태 관리 라이브러리를 사용하여 전역 상태를 관리할 수 있다.\n3. Composition(합성): 컴포넌트 합성을 통해 props drilling을 피할 수 있다."
4+
}

0 commit comments

Comments
 (0)