โ๏ธ ์์
State ๋์ด์ฌ๋ฆฌ๊ธฐ ๋ํด ํ์ตํ๋ค. ์ด์ Javascript ์ฝ๋ฐฑํจ์์ ๋น์ทํ ๊ฐ๋
์ผ๋ก
props๋ฅผ ์ฌ์ฉํ๋ ๊ฑฐ ๊ฐ๋ค.
๐ ๋ฐฐ์ด ๊ฒ
์ํ ๋์ด ์ฌ๋ฆฌ๊ธฐ
- ์์ ์ปดํฌ๋ํธ์ "์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์"๊ทธ ์์ฒด๋ฅผ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ณ ,
์ด ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ๊ฐ ์คํํ๋ค.
- ์ ๋ฌ์ props๋ฅผ ์ด์ฉํ๋ค.(props ์ด๋ฆ ์ ์ ํ๊ฒ ์ง์์ฃผ๊ธฐ)
<ChildComponent>
๋ ๋ง์น ๊ณ ์ฐจ ํจ์๊ฐ ์ธ์๋ก ๋ฐ์ ํจ์๋ฅผ ์คํํ๋ฏ,
props๋ก ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ์ปดํฌ๋ํธ ๋ด์์ ์คํ ํ ์ ์๊ฒ ๋๋ค.
- "์ํ ๋ณ๊ฒฝ ํจ์"๋ ๋ฒํผ์ด ํด๋ฆญ ํ ๋ ์คํ๋๊ธธ ์ํด ํด๋น ๋ถ๋ถ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ค.
import React, { useState } from "react";
export default function ParentComponent() {
const [value, setValue] = useState("์ด๊ธฐ๊ฐ");
const handleChangeValue = (value) => {
setValue(value);
};
return (
<div>
<div>๊ฐ์ {value} ์
๋๋ค</div>
<ChildComponent />
</div>
);
}
function ChildComponent({handleBtnClick}) {
const handleClick = () => {
handleBtnClick('๋๊ฒจ์ค ์์์ด ์ํ๋ ๊ฐ')
};
return <button onClick={handleClick}>๊ฐ ๋ณ๊ฒฝ</button>;
}
<ChildComponent>
๋ ๊ณ ์ฐจ ํจ์๊ฐ ์ธ์๋ก ๋ฐ์ ํจ์๋ฅผ ํํํ๋ฏ, props๋ก ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ์ปดํฌ๋ํธ ๋ด์์ ์คํํ ์ ์๊ฒ ๋๋ค.
- "์ํ ๋ณ๊ฒฝ ํจ์"๋ ๋ฒํผ์ด ํด๋ฆญํ ๋ ์คํ๋๊ธฐ ์ํด ํด๋น ๋ถ๋ถ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ค.
๋ถ์ํจ๊ณผ(Side Effect)
- ์ปดํฌ๋ํธ ๋ด์์ fetch๋ฅผ ์ฌ์ฉํด API ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ด๋ฒคํธ๋ฅผ ํ์ฉํด DOM์ ์ง์ ์กฐ์ํ ๋ ๋ฐ์
let a = "hello";
function b(){
a = "world";
}
b();
์์ํจ์(Pure Function)
- ์ค์ง ํจ์์ ์
๋ ฅ(๋งค๊ฐ๋ณ์)๋ง์ด ํจ์์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ํจ์
- ํจ์์ ์
๋ ฅ์ด ์๋ ๋ค๋ฅธ ๊ฐ์ด ํจ์์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ๊ฒฝ์ฐ
function upper(str){
return str.toUpperCase();
}
upper("hello");
React ํจ์ ์ปดํฌ๋ํธ
- props๊ฐ ์
๋ ฅ์ผ๋ก, JSX Element๊ฐ ์ถ๋ ฅ
(๊ทธ ์ด๋ค Side Effect๋ ์๊ณ ์์ํจ์๋ก ์๋๋๋ค.)
- React๋ Side Effect๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด Hook์ธ Effect Hook์ ์ ๊ณตํ๋ค.
function myList([a, b, c]){
return(
<div>
<div>{a}</div>
<div>{b}</div>
<div>{c}</div>
</div>
)
}
React ์ปดํฌ๋ํธ์์ Side Effect
- ํ์ด๋จธ ์ฌ์ฉ (setTimeout)
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (fetch API, local storage)
Effect Hook
- useEffect๋ฅผ ์ด์ฉํ๋ฉฐ ์ปดํฌ๋ํธ ๋ด์์ Side Effect๋ฅผ ์คํํ ์ ์๊ฒ ํ๋ Hook
useEffect(ํจ์, [์ข
์์ฑ1, ์ข
์์ฑ2, ...])
1. useEffect ์ฒซ๋ฒ์งธ ์ธ์๋ ํจ์๋ฅผ ๋ฐ๋๋ค.
- ํด๋น ํจ์ ๋ด์์ Side Effect๋ฅผ ์คํํ๋ค.
- useEffect(ํจ์)์ธ ๊ฒฝ์ฐ
- ์ปดํฌ๋ํธ ์์ฑ ํ ์ฒ์ ํ๋ฉด์ ๋ ๋๋ง
- ์ปดํฌ๋ํธ์ ์๋ก์ด props๊ฐ ์ ๋ฌ๋๋ฉด ๋ ๋๋ง
- ์ปดํฌ๋ํธ์ ์ํ(state)๊ฐ ๋ฐ๋๋ฉด ๋๋๋ง
- ๋งค๋ฒ ์๋กญ๊ฒ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋ Effect Hook์ด ์คํ๋๋ค.
์ด์ฉ์ ์ฃผ์์ฌํญ
- ์ต์์์์๋ง Hook์ ํธ์ถํ๋ค.
- Reactํจ์ ๋ด์์ Hook์ ํธ์ถํ๋ค.
2. useEffect ๋๋ฒ์งธ ์ธ์๋ ์ข
์์ฑ ๋ฐฐ์ด์ด๋ค.
- ๋ฐฐ์ด์ ์กฐ๊ฑด์ ๋ด๊ณ ์๋ค.(์กฐ๊ฑด์ boolean ํํ์ ํํ์์ด ์๋ ์ด๋ค ๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋)
- ํด๋น ๋ฐฐ์ด์ด "์ด๋ค ๊ฐ์ ๋ชฉ๋ก"์ด ๋ค์ด๊ฐ๊ณ ์ด๋ฅผ ์ข
์์ฑ ๋ฐฐ์ด์ด๋ผ ํ๋ค.
- ๋ฐฐ์ด ๋ด์ ์ข
์์ฑ2์ ๊ฐ์ด ๋ณํ ๋ ์ฒซ๋ฒ์งธ ์ธ์์ ํจ์๊ฐ ์คํ๋๋ค.
ํ ๋ฒ๋ง ์คํ๋๋ Effect ํจ์
useEffect(ํจ์, [])
useEffect(ํจ์)
์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ฒ๋ฆฌ
์ฅ์
- hTTP ์์ฒญ์ ๋น๋๋ฅผ ์ค์ผ ์ ์๋ค.
๋จ์
- ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฒ ๋๊ณ , ํด๋ผ์ด์ธํธ ๋ถ๋ด์ด ๋์ด๋๋ค.
์ปดํฌ๋ํธ ์ธ๋ถ์์ ์ฒ๋ฆฌ
์ฅ์
- ํด๋ผ์ด์ธํธ๊ฐ ํํฐ๋ง ๊ตฌํ์ ์๊ฐํ์ง ์์๋ ๋๋ค.
๋จ์
- ๋น๋ฒํ HTTP์์ฒญ์ด ์ผ์ด๋๊ฒ ๋๋ฉฐ ์๋ฒ๊ฐ ํํฐ๋ง์ ์ฒ๋ฆฌํ๋ฏ๋ก ์๋ฒ๊ฐ ๋ถ๋ด์ ๊ฐ์ง๋ค.
โ๏ธ ๋ง์น๋ฉฐ
์ํ ๋์ด ์ฌ๋ฆฌ๊ธฐ๋ ๋ด๋ ๋ด๋ ์ ๋ง ์ดํด๊ฐ ์ ์๊ฐ๋ ๋ถ๋ถ ์ค ํ๋์ด๋ค.
Javascript์ ์ฝ๋ฐฑ ํจ์์ ๋น์ทํ ๋งฅ๋ฝ์ธ๋ฏ ์ถ๋ค.
๊ณผ์ ๋ฅผ ์งํํ๋๋ฐ ๋ฌธ์ ์ ๋ต์ ๊ฐ๋จํ์ง๋ง
ํ๋ฆ ํ์
ํ๋๊ฒ ์๊ฐ ๋ณด๋ค ์ค๋ ๊ฑธ๋ ธ๋ค.
React์ ํ๋ฆ์ ์ ๋๋ก ํ์
ํด์ผ ๋ค์ ๊ณผ์ ์๋
์ฝ๊ฒ ์งํํ ์ ์์ง ์์๊น ์ถ๋ค.