๊ณต๋ถ๋ฅผ ํ๋๋ฐ ์ฌ์ฉ๋ ์๊ฐ์ ํ๋ ์๊ฐ์ด ์๋ค!
์ค๋์ useEffect hook์ ๋๋ฒ์งธ ์ธ์์ธ dependency์ ๋ํด์ ๋ฐฐ์ ์ต๋๋ค.!
์ผ๋จ ์์งํ ์๋ถ๋ถ์ ํ๋๋ ์๋ค์ด์ ๋๋์ฒด dependency๊ฐ ๋ญ์ง ํต ๋ชจ๋ฅด๊ฒ ๋๋ผ๊ณ ์.
์ผ๋จ ๋ค๋ฅธ ๋ถ๋ค ํ๊ฐ์ ์ด์ฉ๊ณ ๋ฅผ ํตํด์ ์ดํดํ ๋ฐ๋ ์ด๋ ์ต๋๋ค.
(์ฌ์ค ์ฒ์ TIL๋ณด๋ฉด ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต๋๋ ๊ด์ฐฎ์ ์ ๋ค์ด๋ผ๊ณ ์ ์ด๋จ๋๊ฑฐ๊ฐ์๋ฐ..๊ทธ๊ฒ ํ๋ ธ์๋ค)
์ปดํฌ๋ํธ๊ฐ ์ฒ์ rendering ๋์์ ๋๋ฅผ ํฌํจํด์ ์ด๋ ํน์ state์ ๋ณํ๊ฐ ์์ ๋๋ง ์คํํ ์ฝ๋๋ useEffect hook์ ์ฌ์ฉํ๋ฉด ๋๋ค~~
์ฌ๊ธฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๋ useEffect์ dependency๋ผ๊ณ ๋ถ๋ฅด๊ณ array๋ useEffect์ 2๋ฒ์งธ argument๋ก ์ ๋ฌํ๋ค.
์ด๋, dependency ๋ฐฐ์ด์ด ๋น ๋ฐฐ์ด์ผ ๊ฒฝ์ฐ์ฒ๋ผ ์๋ฌด ๋ณํ๋ ๊ฐ์งํ์ง ์์ผ๋ฉด, useEffect๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋์ด๋ ์คํ๋์ง ์์ต๋๋ค. ๋ง์ฝ ๋ชจ๋ ์ํ ๋ณ์๋ฅผ dependency ๋ฐฐ์ด์ ์ ๋ ฅํ๋ฉด, ๋ณ์ ์ค ํ๋๋ผ๋ ๋ณํ๊ฐ ์์ผ๋ฉด ๋ฆฌ๋ ๋๋ง ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํญ์ ๋ชจ๋ ์ํ ๋ณ์๋ฅผ ์ ๋ ฅํ๋ค๋ฉด, ์คํ๋ ค ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ํ์ํ ๋ณ์๋ค๋ง ์ ๋ ฅํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
import Button from "./Button";
import styles from "./App.module.css";
import { useState, useEffect } from "react";
function App() {
// ํจ์์ปดํฌ๋ํธ
//state
const [counter, setValue] = useState(0);
const [keyword, setKEyword] = useState("");
// keyword๋ setKeyword๋ผ๋ function์ผ๋ก ๋ณํ๋๋ค.
const onClick = () => setValue((prev) => prev + 1);
const onChange = (event) => setKEyword(event.target.value);
//setKeyword๋ onChange๋ผ๋ function์ ์ํด ํธ์ถ๋๋ค
//console.log("I run all the time");
// const iRunOnlyOnce = () => {
// console.log("I Run Only Once");
// };
useEffect(() => {
console.log("I run only once");
}, []); // ์ด ๋น ์ด๋ ์ด์ ๋ด์ ๊ฑด ์ฒ์ ๋ ๋์์๋ง ๋ฑ ํ๋ฒ ์คํํ๊ณ ๋ค์ ์คํ๋์ง ๋ง๋ผ๋ ๋ป
useEffect(() => {
console.log("I run 'keyword' changes");
}, [keyword]);
useEffect(() => {
console.log("I run 'counter' changes");
}, [counter]);
useEffect(() => {
console.log("I run keyword and counter changes");
}, [keyword, counter]);
//useEffect(() => {
// if (keyword !== "" && keyword.length > 6) {
// console.log("search for", keyword);
// }
//}, [keyword]);
return (
<div>
<input
value={keyword}
onChange={onChange}
//onChange๋ ์ฌ์ฉ์๊ฐ input์ ๋ณํํ ๋ ํธ์ถ๋๋ค
type="text"
placeholder="search"
></input>
<h1 className={styles.title}>{counter}</h1>
{/* <Button text={"continue"} />
<Button text={"hola"} /> */}
<button onClick={onClick}>click me</button>
</div>
);
}
export default App;
์๋ฌดํผ ๊ฒฐ๋ก ์ ์ผ๋ก useEffect์ ๋๋ฒ์งธ argument๋ ๋ณํ๋ฅผ ๊ฐ์งํ๋ ์์ด์ด๊ณ ํ ๋น๋ ๊ฐ์ ๋ฐ๋ผ์ ๊ฐ์ ๋ณํ๊ฐ ์์ผ๋ฉด ๋ ๋๋ง์ ํ๊ฒ๋์ด์ ๋ถํ์ํ ๋ง์ ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ค๋ ๋ง์ ๋๋ค.
useEffect(callback,[dep])์ callback ํ๋ผ๋ฏธํฐ์ ์ง์ ๋ ํจ์๋ฅผ dep ํ๋ผ๋ฏธํฐ์ ์ง์ ๋ state๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํํด์ค๋ค. depํ๋ผ๋ฏธํฐ์ ์๋ฌด๊ฒ๋ ์์ ๋๋ ๋ณ๊ฒฝ์ ๊ฐ์งํ state๊ฐ ์์ผ๋ฏ๋ก, ๋จ ํ ๋ฒ๋ง ์คํ๋๋ค.
web์ฑ๋ฅ๊ฐ์ ์์ ํฌ๊ฒ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์๊บผ๊ฐ์์!
react.js์ ์ ์ผ ๋ฉ์ง์ ์ component๋ฅผ ์๋ก๊ณ ์นจ ํ ์ ์๋ค๋๊ฑฐ.
์์ ์์์ฒ๋ผ input์ฐฝ์ ์๋ก์ด ์ ๋ณด (์ฆ UI)์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ์๋ก๊ณ ์นจ ํ๋ค๋๊ฑฐ์ฃ !
๊ทผ๋ฐ react.js๋ ๋ณํ๊ฐ ์ผ์ด๋ ๋๋ง ์๋ก๊ณ ์นจํ๋ค๋๊ฑฐ์
๊ทผ๋ฐ ๊ทธ ๋ณํ๋ฅผ ๋งค๋ฒ ์๋ก๊ณ ์นจ ํ๊ธฐ ์ซ์ ์ ์๊ธฐ๋๋ฌธ์ useEffect๋ฅผ ์ด๋ค๋๊ฑฐ์
๊ทธ๋์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ : ์ต์ ๋จ์์ ๋ ๋๋ง์ ์ํด์!
useState(): ๋ณ์, ๋ณ์๋ฅผ ์ ์ดํ๋ ํจ์๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋ณํ๋ ๊ฐ์ ์ ์ด, ํด๋น ๋ถ๋ถ์ ๋ฆฌ๋ ๋๋ง์ ์ํจ
props: ํ๊ทธ์ ์์ฑ ๊ฐ์ ํจ์์ ์๊ท๋จผํธ ์ฒ๋ผ ์ปดํฌ๋ํธ์ ๊ฐ์ ์ ๋ฌํด์ค๋ค.
useEffect(): ์ฝ๋์ ์คํ ์์ ์ ๊ด๋ฆฌํ ์ ์๋ ์ ํ๊ถ์ ์ป๋ ๋ฐฉ์ด๋ง ๊ฐ์ ์กด์ฌ, ๋ํ๋์๊ฐ ์์ ๊ฒฝ์ฐ ์ต์ด 1ํ ์คํ, ์์ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ด ๋ณํ ๊ฒฝ์ฐ ์คํํ๋ค. ์ด ๋ ๋ํ๋์๋ ์ฌ๋ฌ๊ฐ ์
๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋ ๊ฒฝ์ฐ ๋ชจ๋ ์์๋ค์ด ๋ฆฌ๋ ๋๋ง์ด ๋๋ค.
propType์ ์ค์นํ๊ณ props์ ํ์
์ ์ง์ ํด ์ค ์ ์๋ค. ์ด ๋ isRequired๋ก ํ์๊ฐ์ ์ง์ ๊ฐ๋ฅ
๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ค๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ํ๋ฉด์ ๋ฐ๋ก ๋ฐ๋ก ๋ชป๋ฐ๋ผ๊ฐ์ ์กฐ๊ฑด๋ฌธ์ ์ ๋๋ก ์์ฑํ์ง ๋ชปํ๋๋ฐ php์์ ๊ทธ๋ฌ๋ ์ค์๊ฐ ๋ง์์ ๋ฐ๋ก ์ฐพ์๋ด์๋ค๋ฉฐ ^^