카테고리 없음
[React] 2. useEffect
재키재키
2022. 1. 26. 02:17
1. useEffect
- state가 변할때마다 react는 모든 컴포넌트를 자동으로 re-render한다.
- 이때 useEffect를 사용하면 한번만 실행될 컴포넌트들을 따로 지정할 수 있다.
- API 불러오기 등
- useEffect는 두개의 인자를 받는데 처음받는 인자가 바로 한번만 render될 컴포넌트이다.
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 iRunOnlyOnes = () => {
console.log(" I run only once.")
}
useEffect(iRunOnlyOnes, []);
return (
<div>
<h1 className={styles.title}>{counter}</h1>
<Button text={"continue"}/>
<button className={Mybtn.btn} onClick={onClick}>click me</button>
</div>
);
}
2. useEffect의 두번째 인자
- [dependency1, dependency2 ...]
- dependency(지켜보려는것)라고 부른다.
- array이므로 여러개의 dependency를 넣어줄 수 있다.
- useEffect를 사용하면 특정 state가 바뀔때만 컴포넌트가 re-render되게 할 수 있다.
- useEffect(component, [state1, state2 ... ])
- react는 state가 변화될 때 모든 component를 다시 render한다.
- useEffect를 통해 언제 특정 코드를 실행시킬지 정할 수 있다.
import { useState, useEffect } from "react";
function App() {
const [counter, setValue] = useState(0);
const [keyword, setKeyword] = useState("");
const onChange = (event) => setKeyword(event.target.value);
const onClick = () => setValue((prev) => prev + 1);
useEffect(() => {console.log("I run only once");}, []); // 한번만 실행
useEffect(() => {console.log("counter is up");}, [counter]); // counter가 바뀔때 실행
useEffect(() => {
if (keyword != "" && keyword.length > 5){ // keyword가 6자 이상으로 바뀔때 실행
console.log("searching movies");
}
} ,[keyword])
return (
<div>
<h1 className={styles.title}>{counter}</h1>
<input
value={keyword}
placeholder="search movies"
type="text"
onChange={onChange}
/>
<button onClick={onClick}>click me</button>
</div>
);
}
export default App;
3. Cleanup
- 컴포넌트가 생성될 때 뿐만아니라 파괴될때도 특정 코드를 실행시키고 싶다.
- useEffect의 effect에서 다름 함수를 return하면 된다.
function Hello(){
useEffect (() => {
console.log("created :)"); // 생성될 때 실행
return () => console.log("destroyed :)"); // 파괴될 때 실행
}, []);
return <h1>Hello</h1>;
}