From b37d89d4826b3d438b4421702ef803bef1165ee4 Mon Sep 17 00:00:00 2001
From: Lee Jae Yeong <127748428+Jae0o@users.noreply.github.com>
Date: Mon, 29 Jan 2024 12:09:31 +0900
Subject: [PATCH 1/4] Chapter_3-1
---
Chapter_3/useState.md | 48 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
create mode 100644 Chapter_3/useState.md
diff --git a/Chapter_3/useState.md b/Chapter_3/useState.md
new file mode 100644
index 0000000..456ab5e
--- /dev/null
+++ b/Chapter_3/useState.md
@@ -0,0 +1,48 @@
+๐ก State ? ๋ฆฌ์กํธ์์ component ๊ฐ ์ง๋๊ณ ์๋ ์ํ๋ฅผ ์๋ฏธํจ
+
+```jsx
+const [state, setState] = useState(initailState);
+const [num, setNum] = useState(0);
+```
+
+๋ด๋ถ์ state๋ ์ํ๋ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝ ์์ผ ์ค ์ ์์
+
+state
+
+ํ์ฌ์ ์ํ๊ฐ์ ๋ฐฐ์ด ์ฒซ๋ฒ ์งธ ์์ดํ
์ธ state ๋ด๋ถ์ ๋ค์ด์์
+
+setState
+
+์ํ๋ฅผ ๋ณ๊ฒฝ ์์ผ์ฃผ๊ณ ์ถ์๋ ์ฌ์ฉํ ์ ์๋ ํจ์
+
+initailState
+
+ํด๋น state์ ์ด๊ธฐ๊ฐ์ ์ ๋ฌํ ์ ์์
+
+๋ง์ฝ ์ ๋ฌ๋ ์ด๊ธฐ๊ฐ์ด ์๋ค๋ฉด `undefined`
+
+- setState ๋ฅผ ์ด์ฉํด state๋ฅผ ๋ณ๊ฒฝ์์ผ์ฃผ๋ฉด ํด๋น component ๋ ๋ค์ ํ ๋ฒ ๋ ๋๋ง์ด ์งํ๋จ
+- state๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ด๋ถ์ ๋ณ์๋ฅผ ํตํด ์ํ๋ฅผ ๊ด๋ฆฌํ๊ฒ๋๋ค๋ฉด, ๋งค๋ฒ ๋ ๋๋ง์ด ๋ค์ ์ด๋ฃจ์ด์ง๋
+ ํด๋น ํจ์ํ component๋ ๋งค๋ฒ ์คํ๋์ด์ง๊ณ ๋ด๋ถ ๋ณ์์ ๋ณํ๋ ๊ฐ์ ๋งค๋ฒ ์ด๊ธฐํ๋จ
+- state๊ฐ ์์ ์ state๋ฅผ ๋ ๋๋ง์ด ๋์ด๋ ์ ์งํ ์ ์๋ ์ด์ ๋ closer
+
+### ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ
+
+๐ก `useState`์ ๋ณ์ ๋์ ํจ์๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ์ ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ ๋ผ๊ณ ํจ
+
+```jsx
+// ์ผ๋ฐ์ ์ฌ์ฉ ๋ฐฉ๋ฒ
+const [state,setState] = useState(Number.parseInt(window.localStorage ... ))
+// ํด๋น ๋ก์ง์ state๊ฐ ์ฒ์ ์คํ๋๋ ์๊ฐ์๋ ๋ณต์กํ ์ฐ์ฐ์ ์คํํจ
+// ๊ทธ๋ฆฌ๊ณ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด ๋ค์ ๋ฆฌ๋ ๋๋ง ๋๋ ์๊ฐ์๋ ๋ค์ ๋ณต์กํ ์ฐ์ฐ์ ์คํํ๊ฒ๋จ
+
+// ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ
+const [state,setState] = useState(()=>{
+ return Number.parseInt(window.localStorage.getItem(key))
+})
+```
+
+- ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ ์๊ฐ์ ์ฃผ๋ก ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ ํฌํจํ๊ณ ์์๋ ์ฌ์ฉ์ ๊ถ์ฅํจ
+ โ ๋ ๋๋ง์ด ๋ค์ ๋ฐ์ํ๋ฉด ์ธ์๋ก ์ ๋ฌํ ์คํ ๊ฐ์ด ๋ค์ ์คํ๋๊ธฐ ๋๋ฌธ
+ โ ๋ฐฐ์ด์ ๋ํ ์ ๊ทผ `map` `filter` `find` ๋ฑ / Storage์ ์ ๊ทผ
+- ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ ํจ์๋ ์ค๋ก์ง state๊ฐ ์ฒ์ ๋ง๋ค์ด์ง๋ ์๊ฐ์๋ง ์ฌ์ฉ๋จ
From 0c5c98ecc0db7a3fd954882a5a0e8ca5f05d8f22 Mon Sep 17 00:00:00 2001
From: Lee Jae Yeong <127748428+Jae0o@users.noreply.github.com>
Date: Mon, 5 Feb 2024 14:29:52 +0900
Subject: [PATCH 2/4] useEffect
---
Chapter_3/Jae0/useEffect.md | 113 +++++++++++++++++++++++++++++++
Chapter_3/{ => Jae0}/useState.md | 0
2 files changed, 113 insertions(+)
create mode 100644 Chapter_3/Jae0/useEffect.md
rename Chapter_3/{ => Jae0}/useState.md (100%)
diff --git a/Chapter_3/Jae0/useEffect.md b/Chapter_3/Jae0/useEffect.md
new file mode 100644
index 0000000..83e8562
--- /dev/null
+++ b/Chapter_3/Jae0/useEffect.md
@@ -0,0 +1,113 @@
+๐ก ๋ฌด์์ธ๊ฐ ๋ณํ๊ฐ ์๊ฒจ๋ ๋ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ ๋ฐ์ํ๋ Hook
+
+์ฃผ๋ก ํ๋ฉด์ ์ฒ์ ๋ ๋๋ง๋ ๋ , ๋ค์ ๋ ๋๋ง๋๋์๊ฐ , ์ฌ๋ผ์ง๋์๊ฐ ์ ํน์ ์์
์ ์ฒ๋ฆฌํ๊ณ ์ถ์๋ ์ฌ์ฉํจ
+
+```jsx
+useEffect(() => {
+ // code
+}, [value]);
+```
+
+**์ฒซ ๋ฒ์งธ ์ธ์**
+
+Callback ํจ์๋ฅผ ์ ๋ฌ๋ฐ๊ณ ,
+
+Callbackํจ์ ๋ด๋ถ์ ์คํํ๊ณ ์ถ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋จ
+
+**๋ ๋ฒ์งธ ์ธ์**
+
+dependency Arr ๋ฅผ ์ ๋ฌ๋ฐ๊ณ ๋ด๋ถ์๋ ๊ฐ(value)์ ์ ๋ฌ ํ ์ ์์
+
+- ์ ๋ฌ๋ฐ์ ๊ฐ(value)์ด ๋ณํ ๋์ด์ง ๋ ๋ง๋ค useEffect ๋ด๋ถ์ Callback ํจ์๊ฐ ์คํ๋์ด์ง
+
+๐ฅย useEffect๋ ํน๋ณํ ๊ธฐ๋ฅ์ ํตํด ๊ฐ์ ๊ฐ์ํ์ง ์๊ณ ,
+
+๋ ๋๋ง์ด ์๋กญ๊ฒ ๋ ๋๋ง๋ค ์์กด์ฑ์ ์กด์ฌํ๋ ๊ฐ์ ๋ณด๋ฉฐ ์์กด์ฑ์ ๊ฐ์ด ์ด์ ๊ฐ๊ณผ ๋ค๋ฅผ๋
+
+์ ๋ฌ๋ฐ์ Callback ํจ์๋ฅผ ์คํํ๊ฒ ๋๋ค.
+
+- ์ผ๋ถ ์ธ๋ถ ๋ฐ์ดํฐ์ ๋๊ธฐํ ํ๋ ค๋๊ฒ์ด ์๋๋ผ๋ฉด ์ฌ์ฉํ์ง ์์
+- Component์ ์ต์์ ์์น์์๋ง ์ ์ธํ ์ ์์
+- strict ๋ชจ๋์์๋ useEffect๊ฐ 2๋ฒ ์คํ ๋์ด์ง
+
+### ์์กด์ฑ
+
+``
+
+์์กด์ฑ ๋ฐฐ์ด ์กฐ์ฐจ ์ ๋ฌํ์ง ์๋ ๊ฒฝ์ฐ ์์กด์ฑ์ ๋น๊ตํ ํ์ ์์ด ๋ ๋๋ง ๋ ๋๋ง๋ค callback์ด ์คํ๋จ
+
+โ ์ฃผ๋ก component๊ฐ ๋ ๋๋ง ๋๊ฒ์ ํ์ธํ๊ณ ์ถ์ ๋ ์ฌ์ฉํจ
+
+```jsx
+// ๋ ๋๋ง ํ
์คํธ ์ฝ๋
+useEffect(()=>{
+ console.log("๋ ๋๋ง ๋ฐ์"
+})
+```
+
+๐ฅย ๊ทธ๋ ๋ค๋ฉด ์ ์๋ฌด๊ฒ๋ ์ ๋ฌํ์ง ์๊ณ ์ฌ์ฉํ ๊น?
+
+1. useEffect๋ component๊ฐ ๋ ๋๋ง์ด ์๋ฃ๋ ํ ์คํ๋์ด์ง๊ณ , ์ผ๋ฐ ํจ์๋ ๋ ๋๋ง ๋์ค ์คํ๋์ด์ง
+2. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๊ด์ ์์ useEffect๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์ ์คํ๋๋๊ฒ์ ๋ณด์ฅํจ
+
+`[]`
+
+๋น ๋ฐฐ์ด์ ์ ๋ฌํ ๊ฒฝ์ฐ React์์๋ ๋น๊ตํ ์์กด์ฑ์ด ์๋ค๊ณ ํ๋จํ๊ณ ์ต์ด ๋ ๋๋ง ์งํ์๋ง ์คํ๋์ด์ง
+
+### ์ฃผ์, ๊ถ์ฅ ์ฌํญ
+
+- useEffect๊ฐ ์ ๋ฌ ๋ฐ๋ callback์ ๊ธฐ๋ช
ํจ์๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ๊ถ์ฅํจ
+
+ โ ๋ง์ useEffect๋ค์ด ์๊ฒจ๋๊ณ ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ์ํด ์ฌ์ฉํ๊ธฐ ์ข์
+
+ ```jsx
+ useEffect(function ์ด๋ฆ() {}, []);
+ ```
+
+- useEffect๋ ๊ฐ๋ฅํ ์๊ณ ๊ฐ๋ณ๊ฒ ๋ง๋ค์๋ก ์ข์
+
+- dependency์๋ ์ธ๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด, ํจ์์ ๊ฐ์ ์ฐธ์กฐ๊ฐ์ ์ฌ์ฉํ๋ฉด ์๋๋ค
+
+ ```jsx
+ function ChatRoom({ roomId }) {
+ const [message, setMessage] = useState('');
+
+ const options = {
+ serverUrl: serverUrl,
+ roomId: roomId
+ };
+
+ useEffect(() => {
+ const connection = createConnection(options);
+ connection.connect();
+ return () => connection.disconnect();
+ }, [options]);
+ // ...
+ ```
+
+ ์์ ์์์ฒ๋ผ options ๋ฅผ ๊ฐ์ํ๊ณ ์๋ค๋ฉด,
+ ๋ง์ฝ options์ ๋ฐ์ดํฐ๊ฐ ๋ณํ์ง ์์ ์ํ์์ ๋ค๋ฅธ ์ด์ ๋ก rerender๊ฐ ๋ฐ์ํ์๋ ์ํ๋ ์๋๋
+ useEffect๊ฐ ๋ค์ ์คํ๋์ง ์๋ ๊ฒ์ ์๋ํจ.
+ ํ์ง๋ง ๐ฅย options๋ ์ฐธ์กฐ ๋ฐ์ดํฐ ์ด๊ธฐ๋๋ฌธ์ rerender์์ ๊ฐ์ ๋ณํ๊ฐ ์์ด๋ ์ฐธ์กฐ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋จ
+ ๋ฐ๋ผ์ useEffect๋ ์ฐธ์กฐ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๊ฒ์ ๋ณํ๋ก ๊ฐ์งํ๊ณ useEffect๊ฐ ์คํ๋์ด์ง
+
+### Clean Up
+
+๐ก ์ด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์คํ๋๋ฉฐ, ์ด์ ์ํ๋ฅผ ์ฒญ์ํด์ฃผ๋ ์ญํ
+
+```jsx
+useEffect(() => {
+ element.addEventListener();
+
+ return () => {
+ element.removeEventListener();
+ // clean up zone
+ };
+});
+```
+
+clean up ์์
์ useEffect ์ ์ ๋ฌํ callback ํจ์์ return ํจ์ ๋ด๋ถ์์ ์คํ๋์ด์ง
+
+๐ฅย ์ฆ useEffect ๋ด๋ถ์ callback์ด ์คํ๋ ๋ ์ด์ clean up ํจ์๊ฐ ์กด์ฌํ๋ค๋ฉด
+
+clean up ํจ์๋ฅผ ์คํ ํ ๋ค callback ํจ์๋ฅผ ์คํํจ
diff --git a/Chapter_3/useState.md b/Chapter_3/Jae0/useState.md
similarity index 100%
rename from Chapter_3/useState.md
rename to Chapter_3/Jae0/useState.md
From 3236861d26244f8b7ce74c0b1af320d05739fdab Mon Sep 17 00:00:00 2001
From: Lee Jae Yeong <127748428+Jae0o@users.noreply.github.com>
Date: Mon, 26 Feb 2024 13:50:32 +0900
Subject: [PATCH 3/4] useCallback
---
Chapter_3/Jae0/useCallback.md | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 Chapter_3/Jae0/useCallback.md
diff --git a/Chapter_3/Jae0/useCallback.md b/Chapter_3/Jae0/useCallback.md
new file mode 100644
index 0000000..37c80b9
--- /dev/null
+++ b/Chapter_3/Jae0/useCallback.md
@@ -0,0 +1,21 @@
+## useCallback
+
+`useMemo` ์์๋ ์ ๋ฌ ๋ฐ์ `Callback` ์ `return` ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์
ํ๊ฒ๊ณผ ์ ์ฌํ๊ฒ
+
+๐ก `useCallback` ์ ์ ๋ฌ๋ฐ์ `Callback` ํจ์ ์์ฒด๋ฅผ ์ ์ฅํ์ฌ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํจ
+โ ์ฆ ํน์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ๋ค์ ์ฌ์ฌ์ฉํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง
+
+useMemo์์ ์ฐจ์ด์ ์ ์ ์ฅํ๊ณ ์ ํ๋ ๊ฐ์ด ๋ณ์๋ ํจ์๋์ ์ฐจ์ด ์ผ๋ฟ
+
+`const memoFuncName = useCallback( Callback , [ ] )`
+
+- **์ฒซ ๋ฒ์งธ ์ธ์**
+
+ ๋ณ์๋ ์ธ์๋ก ์ ๋ฌ๋ฐ์ `Function`์ ๋ฉ๋ชจ์ด์ ์ด์
ํด ๊ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋จ
+
+- **๋ ๋ฒ์งธ ์ธ์**
+ Array๋ก Array ์์ ๋ด๋ถ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋ ์ด์ ๋ณ๊ฒฝ๋์ง ์์!
+
+**์ฃผ์์ **
+
+๐ฅย ํจ์ ๋ด๋ถ์ ์ ์ญ ๋ณ์๋ฅผ ๋ฐ์ ์ฌ์ฉํ๋ ๋ก์ง์ด ์กด์ฌํ๋ค๋ฉด ํด๋น ๋ณ์๋ฅผ ๋ํ๋์ ์์ ๋ฃ์ด์ค์ผํจ!
From 35c219340550827cf24f2ab5941e5cdf52b1faf2 Mon Sep 17 00:00:00 2001
From: Lee Jae Yeong <127748428+Jae0o@users.noreply.github.com>
Date: Mon, 26 Feb 2024 13:55:03 +0900
Subject: [PATCH 4/4] useContext
---
Chapter_3/Jae0/useContext.md | 105 +++++++++++++++++++++++++++++++++++
1 file changed, 105 insertions(+)
create mode 100644 Chapter_3/Jae0/useContext.md
diff --git a/Chapter_3/Jae0/useContext.md b/Chapter_3/Jae0/useContext.md
new file mode 100644
index 0000000..3bd820e
--- /dev/null
+++ b/Chapter_3/Jae0/useContext.md
@@ -0,0 +1,105 @@
+> **Prop Drilling & Context**
+>
+> ๋ง์ฝ ์ต ์์ Component ๊ฐ ์ง๋๊ณ ์๋ ์ํ๋ฅผ ๊น์ด ์กด์ฌํ๋ ํ์ Component์๊ฒ ์ ๋ฌํ๊ธฐ
+>
+> ์ํด์๋ ์ค๊ฐ์ ์กด์ฌํ๋ Component๋ค์ prop์ ํตํด ์ ๋ฌ > ์ ๋ฌ > ์ ๋ฌ > ์ ๋ฌ์ ํตํด
+>
+> ์ฃผ๊ณ ๋ฐ์์ผํ๋ ๋ณต์กํ ๋ฌธ์ ๊ฐ ๋ฐ์! - ๋ฌธ์ ๋ ํ์์์ ์ต์์๋ก ์ ๋ฌํ ๋๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ
+>
+> ์ด๋ฐ ๋ฌธ์ ๋ ๊น์ด์ง๊ณ ์ํ๊ฐ ๋ง์์ง์๋ก ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๋ถํธํ๊ณ ,
+>
+> ์ค๊ฐ์ state๊ฐ ์๋์ ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝ๋ ์ ์๋ ์ํ์ฑ์ ์ด๋ํจ
+>
+> ์ด๋ฐ ๊ณผ์ ์ PropDrilling์ด๋ผ๊ณ ํจ
+>
+> ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ prop drilling์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋
์ด Context ์
+
+๐ก ์ด๋ฐ Prop Drilling์ ๊ฐ์ ํ๊ธฐ ์ํด Redux Recoil ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ๊ณ ,
+
+Context API๋ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ ์ํ ์ฃผ์
API๋ก
+์์ ์ปดํฌ๋ํธ์์ ๋ง๋ค์ด์ง Context๋ฅผ ํตํด ํ์ ์ปดํฌ๋ํธ๊ฐ ์ํ๋ฅผ ์ฝ๊ฒ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํจ
+
+- ์ํ๋ฅผ ์ฃผ์
ํ๋ ์ญํ ์ ํ ๋ฟ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ์ํ ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๋ API๊ฐ ์๋
+ - ๐ฅย Context API๋ ํน์ ์ํ๋ฅผ ํตํด ๋ค๋ฅธ ์ํ๋ฅผ ๋ง๋ค์ ์์ผ๋ฉฐ,
+ ํ์์ ๋ฐ๋ผ ์ด๋ฌํ ์ํ ๋ณํ๋ฅผ ์ต์ ํ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋
+- ์ต์๋จ์ Context provider๋ฅผ ์ง์ ํ๊ธฐ๋ณด๋ค๋ ๋ฒ์๋ฅผ ์ขํ๊ณ ์ขํ ์ฌ์ฉํ๋๊ฒ์ด ์ข์
+
+**์ฌ์ฉ ๋ฐฉ๋ฒ**
+
+```jsx
+// Context ์์ฑ
+
+import { createContext, useState } from "react";
+
+// createContext ๋ฅผ ํตํด Context๋ฅผ ๋ง๋ค์ด์ค
+export const Context = createContext();
+
+// component๋ฅผ umbrella๋ก ๊ฐ์ธ์ค ์ธ๋ถ Wrap component ํจ์ ๋ง๋ค๊ธฐ.
+export function ContextProvider({ children }) {
+ // conText์์ ์ฌ์ฉํ ๊ธฐ๋ณธ State ์ง์
+ const [State, setState] = useState(false);
+
+ // ์ํ๋ฅผ ๋ณ๊ฒฝํ Function
+ const Toggle = () => setState((state) => !state);
+
+ return (
+