๐ฌ ReactJS๋ก ์ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ (08) - useEffect
useEffect
- ๋๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๋ function
- ์ฒซ๋ฒ์งธ ์ธ์ : ๋ด๊ฐ ๋ฑ ํ๋ฒ๋ง ์คํํ๊ณ ์ ํ๋ ์ฝ๋
- ๋๋ฒ์งธ ์ธ์ : ๋ฐฐ์ด [] ์ด ๋ค์ด๊ฐ๋ค
- ์ปดํฌ๋ํธ์ ์ฒซ๋ฒ์งธ ๋ ๋ ์์ ์ ์ฒซ๋ฒ์งธ ์ธ์๊ฐ ํธ์ถ๋๋ค
state๊ฐ ๋ณํํ๋ , ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋ ๋จ ํ๋ฒ๋ง ์คํ๋๋๋ก ํด์ค๋ค - ์ฐธ๊ณ ๋ก useEffect๋ ์ปดํฌ๋ํธ ๋ ๋๋ง ์ดํ์ ์คํ๋๋ค ์ฆ, ํ๋ฉด์ด ๋จผ์ ๋ค ๊ทธ๋ ค์ง๊ณ ๊ทธ ์ดํ์ ์คํ๋๋ค๋ ์ ! ์์๋์ฅ
useEffect๋ฅผ ์ฌ์ฉํด ์ฝ๋๊ฐ ์ธ์ ์คํ๋ ์ง ๊ฒฐ์ ํ ์ ์๋ค
- ex1) ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๋ ์ฒซ ์์์
- ex2) ๋ฌด์ธ๊ฐ๊ฐ update๋ ๋
"I run only once."
1 2 3
useEffect(() => { console.log("I run only once."); }, []);
โ ๋๋ฒ์งธ ์ธ์ ๋ฐฐ์ด์ด ๋น์ด์๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ๊ฐd ๋ ๋๋ง ๋ ๋ ํ๋ฒ ์คํ๋๊ณ ๋
"I run when 'counter' changes."
1 2 3
useEffect(() => { console.log("I run when 'counter' changes."); }, [counter]);
โ counter๊ฐ ๋ณํํ ๋๋ง๋ค ์คํ
"I run when 'keyword' length is more than 5"
1 2 3 4 5
useEffect(() => { if (keyword !== "" && keyword.length > 5) { console.log("I run when 'keyword' length is more than 5", keyword); } }, [keyword]);
โ keyword์ ๊ธธ์ด๊ฐ 5 ์ด์์ผ๋ ์คํ
- ์ ์ฒด ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
// App.js import { useState, useEffect } from "react"; function App() { const [counter, setValue] = useState(0); const [keyword, setKeyword] = useState(""); const onClick = () => setValue((prev) => prev + 1); const onChange = (event) => setKeyword(event.target.value); useEffect(() => { console.log("I run only once."); }, []); useEffect(() => { if (keyword !== "" && keyword.length > 5) { console.log("I run when 'keyword' length is more than 5", keyword); } }, [keyword]); useEffect(() => { console.log("I run when 'counter' changes."); }, [counter]); return ( <div> <input value={keyword} onChange={onChange} type="text" placeholder="Keyword here..." /> <h1>{counter}</h1> <button onClick={onClick}>click me</button> </div> ); } export default App;
- ์ปดํฌ๋ํธ๊ฐ ํ๊ดด๋ ๋ ์ฝ๋๊ฐ ์คํ๋๋๋ก ํ ์๋ ์๋ค
โ return์ผ๋ก ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.1 2 3 4 5 6 7 8 9 10 11
function Hello() { function hiFn() { console.log("created :)"); return byeFn; } function byeFn() { console.log("bye :("); } useEffect(hiFn, []); return <h1>Hello</h1>; }
This post is licensed under CC BY 4.0 by the author.