React컴포넌트가 화면에 렌더링된 이후에 비동기적으로 처리되어야 하는 부수적인 효과.
console.log()도 sideEffect의 일부이다.
특징
기본 문법
import {useEffect} from 'react'
useEffect(() => {},[]);
{} 실행시키고 싶은 함수나, 문법, 행동.
[] 넣은 state가 실행될때만 useEffect내용을
실행함
useEffect( () => {실행할 내용},
[이 state가 실행될때만 위에 내용 실행시켜주세요!])
[]안에는 ,를 써서 여러가지상황에서 실행시킬수있음!
[]를 빼면 렌더링 될때마다 계속 실행됨!
import {useEffect} from 'react'
export default function example() {
console.log('render1')
useEffect() => {
alert('effect!')
});
console.log('render2')
}
이렇게 실행시킨다면 어떻게 나올까?
'render1' // 1순위
'render2' // 2순위
'effect!' // 3순위
자바스크립트는 위에서 부터 아래로 순서대로 렌더링됨.
하지만 useEffect훅을 통해 후순위로 밀려남,
이로써 렌더링을 막지않고 alert창을 띄울 수 있게됨!
import {useEffect,useState} from 'react'
export default function example() {
const [count, setCount] = useState();
// 카운트 버튼을 누르면 count의 숫자가 1씩올라가는
// useState 훅!
console.log('render')
useEffect(() => {
console.log('count')
},[count])
useEffect(() => {
console.log('effect!')
},[])
}
이렇게 실행시키면 콘솔에 어떻게 나올까?
'render'
'count'
'effect!'
처음 렌더링 될때는 한번씩 다 실행이됨.
버튼을 눌렀을때
'render'
'count'
count라는 state훅을 넣어놨기때문에 재실행이됨.
원하는 부분만 넣어서 재실행이 되도록 할수있음!
import {useEffect,useState} from 'react'
export default function example() {
useEffect(() => {
const interval = setInterval(() => {
console.log('interval')
},500);
// 0.5초 마다 콘솔에 'interval'이 계속나옴.
return () => {
console.log('end Interval')
clearInterval(interval)
}
// 페이지 이동시 인터벌을 종료시켜줌!
},[])
}