Skip to content

Commit f39068a

Browse files
committed
docs: update react-calls-components-and-hooks
1 parent 8310e7d commit f39068a

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

โ€Žsrc/content/reference/rules/react-calls-components-and-hooks.mdโ€Ž

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,37 @@ React๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ปดํฌ
1313
## ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ๋งˆ์„ธ์š” {/*never-call-component-functions-directly*/}
1414
์ปดํฌ๋„ŒํŠธ๋Š” JSX์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•˜์ง€ ๋งˆ์„ธ์š”. React๊ฐ€ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
1515

16-
React๋Š” [๋ Œ๋”๋งํ•˜๋Š” ๋™์•ˆ](/reference/rules/components-and-hooks-must-be-pure#how-does-react-run-your-code) ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๊ฐ€ ์–ธ์ œ ํ˜ธ์ถœ๋ ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. React์—์„œ๋Š” ์ด๋ฅผ JSX๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
16+
React๋Š” [๋ Œ๋”๋งํ•˜๋Š” ๋™์•ˆ](/reference/rules/components-and-hooks-must-be-pure#how-does-react-run-your-code) ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๊ฐ€ ์–ธ์ œ ํ˜ธ์ถœ๋ ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. React๋Š” ์ด๋ฅผ JSX๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
1717

1818
```js {2}
1919
function BlogPost() {
20-
return <Layout><Article /></Layout>; // โœ… ์ปดํฌ๋„ŒํŠธ๋ฅผ JSX์—์„œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค
20+
return <Layout><Article /></Layout>; // โœ… Good: ์ปดํฌ๋„ŒํŠธ๋ฅผ JSX์—์„œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
2121
}
2222
```
2323

2424
```js {2}
2525
function BlogPost() {
26-
return <Layout>{Article()}</Layout>; // ๐Ÿ”ด ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ๋งˆ์„ธ์š”
26+
return <Layout>{Article()}</Layout>; // ๐Ÿ”ด Bad: ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ๋งˆ์„ธ์š”.
2727
}
2828
```
2929

3030
์ปดํฌ๋„ŒํŠธ๊ฐ€ Hook์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์กฐ๊ฑด๋ฌธ์—์„œ ์ง์ ‘ ํ˜ธ์ถœํ•  ๋•Œ [Hook์˜ ๊ทœ์น™](/reference/rules/rules-of-hooks)์„ ์œ„๋ฐ˜ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
3131

3232
React๊ฐ€ ๋ Œ๋”๋ง์„ ์กฐ์ •ํ•˜๋„๋ก ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
3333

34-
* **์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•จ์ˆ˜ ์ด์ƒ์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.** React๋Š” Hook์„ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ์— _๋กœ์ปฌ ์ƒํƒœ_ ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠธ๋ฆฌ ๋‚ด์—์„œ ๊ณ ์œ ํ•œ ์ •์ฒด์„ฑ์„ ๊ฐ–๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
34+
* **์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•จ์ˆ˜ ์ด์ƒ์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.** React๋Š” Hook์„ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ์— <em>์ง€์—ญ State</em>์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠธ๋ฆฌ ๋‚ด์—์„œ ๊ณ ์œ ํ•œ ์ •์ฒด์„ฑ์„ ๊ฐ–๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3535
* **์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์ด ์žฌ์กฐ์ • ๊ณผ์ •์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.** React๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋ฉด ํŠธ๋ฆฌ์˜ ๊ฐœ๋…์  ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด `<Feed>`์—์„œ `<Profile>` ํŽ˜์ด์ง€๋กœ ์ „ํ™˜๋  ๋•Œ React๋Š” ์ด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
3636
* **React๊ฐ€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.** ์˜ˆ๋ฅผ ๋“ค์–ด React๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์ด์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ํฐ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3737
* **๋” ๋‚˜์€ ๋””๋ฒ„๊น… ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.** ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋˜๋ฉด, ๊ฐœ๋ฐœ ์ค‘์— ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ํ’๋ถ€ํ•œ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3838
* **์žฌ์กฐ์ • ๊ณผ์ •์ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.** React๋Š” ํŠธ๋ฆฌ์—์„œ ์ •ํ™•ํžˆ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ์ง€ ๊ฒฐ์ •ํ•˜๊ณ , ํ•„์š” ์—†๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•ฑ์„ ๋” ๋น ๋ฅด๊ณ  ๋ฏผ์ฒฉํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
3939

4040
---
4141

42-
## Hook์„ ์ผ๋ฐ˜ ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š” {/*never-pass-around-hooks-as-regular-values*/}
42+
## Hook์„ ์ผ๋ฐ˜ ๊ฐ’์ฒ˜๋Ÿผ ์ „๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š” {/*never-pass-around-hooks-as-regular-values*/}
4343

4444
Hook์€ ์ปดํฌ๋„ŒํŠธ๋‚˜ Hook ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Hook์„ ์ผ๋ฐ˜ ๊ฐ’์ฒ˜๋Ÿผ ์ „๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š”.
4545

46-
Hook์€ ์ปดํฌ๋„ŒํŠธ์— React ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Hook์€ ํ•ญ์ƒ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ผ๋ฐ˜ ๊ฐ’์ฒ˜๋Ÿผ ์ „๋‹ฌํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Hook์„ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•ด์•ผ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” _๋กœ์ปฌ ์ถ”๋ก _ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
46+
Hook์€ ์ปดํฌ๋„ŒํŠธ์— React ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Hook์€ ํ•ญ์ƒ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ผ๋ฐ˜ ๊ฐ’์ฒ˜๋Ÿผ ์ „๋‹ฌํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Hook์„ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•ด์•ผ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” _์ง€์—ญ ์ถ”๋ก _ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
4747

4848
์ด ๊ทœ์น™์„ ์–ด๊ธฐ๋ฉด React๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ตœ์ ํ™”ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
4949

@@ -53,7 +53,7 @@ Hook์€ ๊ฐ€๋Šฅํ•œ ํ•œ "์ •์ "์œผ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Hook์„
5353

5454
```js {2}
5555
function ChatInput() {
56-
const useDataWithLogging = withLogging(useData); // ๐Ÿ”ด ๊ณ ์ฐจ Hook์„ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”
56+
const useDataWithLogging = withLogging(useData); // ๐Ÿ”ด Bad: ๊ณ ์ฐจ Hook์„ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.
5757
const data = useDataWithLogging();
5858
}
5959
```
@@ -62,7 +62,7 @@ Hook์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋ฉฐ ์ˆ˜์ •๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. Hook์„
6262

6363
```js {2,6}
6464
function ChatInput() {
65-
const data = useDataWithLogging(); // โœ… Hook์„ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜์„ธ์š”
65+
const data = useDataWithLogging(); // โœ… Good: Hook์„ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜์„ธ์š”.
6666
}
6767

6868
function useDataWithLogging() {
@@ -76,7 +76,7 @@ Hook์€ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ๋„ ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Hook์„ ๊ฐ’์œผ
7676

7777
```js {2}
7878
function ChatInput() {
79-
return <Button useData={useDataWithLogging} /> // ๐Ÿ”ด Hook์„ props๋กœ ์ „๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š”
79+
return <Button useData={useDataWithLogging} /> // ๐Ÿ”ด Bad: Hook์„ Props๋กœ ์ „๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š”.
8080
}
8181
```
8282

@@ -88,12 +88,12 @@ function ChatInput() {
8888
}
8989

9090
function Button() {
91-
const data = useDataWithLogging(); // โœ… Hook์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์„ธ์š”
91+
const data = useDataWithLogging(); // โœ… Good: Hook์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์„ธ์š”.
9292
}
9393

9494
function useDataWithLogging() {
9595
// Hook์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ์กฐ๊ฑด๋ถ€ ๋กœ์ง์ด ์žˆ๋‹ค๋ฉด, ์ด๋Š” Hook ๋‚ด๋ถ€์— ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
9696
}
9797
```
9898

99-
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด `<Button />` ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ›จ์”ฌ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ๋„ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. Hook์„ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์˜ ๋ณต์žก์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ , ๋กœ์ปฌ ์ถ”๋ก ์„ ๋ฐฉํ•ดํ•˜์—ฌ ์žฅ๊ธฐ์ ์œผ๋กœ ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์„ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค. ๋˜ํ•œ Hook์„ ์กฐ๊ฑด๋ถ€๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” [Hook์˜ ๊ทœ์น™](/reference/rules/rules-of-hooks)์„ ์‹ค์ˆ˜๋กœ ์–ด๊ธฐ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ชจํ‚นํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋Œ€์‹  ์„œ๋ฒ„๋ฅผ ๋ชจํ‚นํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ๋ฐ์ดํ„ฐ์— ์‘๋‹ตํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์•ฑ์„ end-to-end ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
99+
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด `<Button />` ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ›จ์”ฌ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ๋„ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. Hook์„ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์˜ ๋ณต์žก์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ , ์ง€์—ญ ์ถ”๋ก ์„ ๋ฐฉํ•ดํ•˜์—ฌ ์žฅ๊ธฐ์ ์œผ๋กœ ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์„ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค. ๋˜ํ•œ Hook์„ ์กฐ๊ฑด๋ถ€๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” [Hook์˜ ๊ทœ์น™](/reference/rules/rules-of-hooks)์„ ์‹ค์ˆ˜๋กœ ์–ด๊ธฐ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ชจํ‚น<sup>Mocking</sup>ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋Œ€์‹  ์„œ๋ฒ„๋ฅผ ๋ชจํ‚น<sup>Mocking</sup>ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ๋ฐ์ดํ„ฐ์— ์‘๋‹ตํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์•ฑ์„ end-to-end ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

0 commit comments

Comments
ย (0)