@@ -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}
1919function  BlogPost () {
20-   return  < Layout>< Article / >< / Layout> ; //  โ
 ์ปดํฌ๋ํธ๋ฅผ JSX์์๋ง ์ฌ์ฉํฉ๋๋ค
20+   return  < Layout>< Article / >< / Layout> ; //  โ
 Good:  ์ปดํฌ๋ํธ๋ฅผ JSX์์๋ง ์ฌ์ฉํฉ๋๋ค. 
2121}
2222``` 
2323
2424``` js  {2}
2525function  BlogPost () {
26-   return  < Layout> {Article ()}< / Layout> ; //  ๐ด ์ปดํฌ๋ํธ ํจ์๋ฅผ ์ง์  ํธ์ถํ์ง ๋ง์ธ์
26+   return  < Layout> {Article ()}< / Layout> ; //  ๐ด Bad:  ์ปดํฌ๋ํธ ํจ์๋ฅผ ์ง์  ํธ์ถํ์ง ๋ง์ธ์. 
2727}
2828``` 
2929
3030์ปดํฌ๋ํธ๊ฐ Hook์ ํฌํจํ๊ณ  ์๋ค๋ฉด, ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ณต๋ฌธ์ด๋ ์กฐ๊ฑด๋ฌธ์์ ์ง์  ํธ์ถํ  ๋ [ Hook์ ๊ท์น] ( /reference/rules/rules-of-hooks ) ์ ์๋ฐํ๊ธฐ ์ฝ์ต๋๋ค.
3131
3232React๊ฐ ๋ ๋๋ง์ ์กฐ์ ํ๋๋ก ํ๋ฉด ์ฌ๋ฌ ์ด์ ์ด ์์ต๋๋ค.
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
4444Hook์ ์ปดํฌ๋ํธ๋ 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}
5555function  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}
6464function  ChatInput () {
65-   const  data  =  useDataWithLogging (); //  โ
 Hook์ ์๋ก ์์ฑํ์ธ์
65+   const  data  =  useDataWithLogging (); //  โ
 Good:  Hook์ ์๋ก ์์ฑํ์ธ์. 
6666}
6767
6868function  useDataWithLogging () {
@@ -76,7 +76,7 @@ Hook์ ๋์ ์ผ๋ก ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด Hook์ ๊ฐ์ผ
7676
7777``` js  {2}
7878function  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
9090function  Button () {
91-   const  data  =  useDataWithLogging (); //  โ
 Hook์ ์ง์  ์ฌ์ฉํ์ธ์
91+   const  data  =  useDataWithLogging (); //  โ
 Good:  Hook์ ์ง์  ์ฌ์ฉํ์ธ์. 
9292}
9393
9494function  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