import { useState } from "react";
function App() {
const [counter, setValue] = useState(0);
const onClick = () => setValue((prev) => prev + 1);
console.log("render")
return (
<div>
<h1>{counter}</h1>
<button onClick={onClick}>click!</button>
</div>
);
}
export default App;
버튼을 클릭할때마다 render를 출력 해주고 있음
-> state가 변화해도 render를 출력하고 싶지 않다면..?
-> useEffect 사용
import { useState, useEffect } from "react";
function App() {
const [counter, setValue] = useState(0);
const onClick = () => setValue((prev) => prev + 1);
console.log("i run all the time");
const iRunOnlyOnce = () => {
console.log("i run only once")
}
useEffect(iRunOnlyOnce, []);
return (
<div>
<h1>{counter}</h1>
<button onClick={onClick}>click!</button>
</div>
);
}
export default App;
클릭버튼 입력시 useEffect의 첫번째 인자인 함수는 한번만 실행됨
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);
console.log("i run all the time");
useEffect(() => {
console.log("CALL THE API")
}, []);
useEffect(() => {
if(keyword !== "" && keyword.length > 5){
console.log("SEARCH FOR", keyword)
}
}, [keyword])
return (
<div>
<input
value={keyword}
onChange = {onChange}
type="text"
placeholder="Search here..." />
<h1>{counter}</h1>
<button onClick={onClick}>click!</button>
</div>
);
}
export default App;
useEffect(() => {
console.log("I run when 'keyword' or 'conter' changes.")
}, [keyword, counter])
keyword 또는 counter의 값이 변하면 로그 출력
import { useState, useEffect } from "react";
function Hello() {
function byeFn() {
console.log("bye!")
}
function hiFn() {
console.log("created!");
return byeFn;
}
useEffect(hiFn, [])
return <h1>Hello</h1>
}
function CleanupFunction () {
const [showing, setShowing] = useState(false);
const onClick = () => setShowing((prev) => !prev)
return(
<div>
{showing ? <Hello /> : null}
<button onClick={onClick}>
{showing ? "Hide" : "show"}
</button>
</div>
)
}
export default CleanupFunction;
빈 deps -> 컴포넌트 파괴시 cleanup 함수 실행 -> 리렌더링 -> useEffect 함수 실행 -> 이전 effect는 삭제되고 return 함수를 실행시킴