카테고리 없음
[React Hooks] useEffect , useCallback 사용법
덤벨로퍼
2020. 6. 17. 15:27
useEffect
const KaKaoLoginButton = () =>{
const classes = useStyles();
const kakao = new Kakao();
React.useEffect(()=>{ //렌더링 될때마다 작업수행
queryString.parse(history.location.search);
});
return (
<div>
<Button className={`kakao-button ${classes.kakaoButton}`}
variant = 'contained'
startIcon = {<KaKaoLogo/>}
>
카카오로 시작하기
</Button>
</div>
)
}
useEffect 는 componentDidMount 와 componentDidUpdate 를 합친 형태라고도한다.
1. 렌더가 다된직후 ,
2.상태 업데이트되서 렌더링다시한 직후
에 useEffect를 실행한다.
그러므로 useEffect 사용하면 같은코드를 componentDidMount 와 componentDidUpdate 를 나눌 필요가없다.
return -> useEffect -> 업데이트 ->useEffect
useCallback
function HomePage (){
const onGoAuthMobilePage = React.useCallback(()=>{ //렌더링 최소화
},[]) //배열 값 바뀌었을 때만 함수를 새로 생성(-> 비어있으면 렌더링 한번만)
return (
<div className="home-container">
<div className="main">
<div className="description">
<The8daysLogo/>
XXXX와 함께
<br/>
나만의 워라밸을 시작하세요!
</div>
<div className="social-login-buttons">
<KaKaoLoginButton />
</div>
<div className="main-footer">
<MainFooter/>
</div>
</div>
</div>
)
}
export default HomePage;
상태가 변함에따라 return 함수가 리 렌더링 되지만 함수도 다시 렌더링이된다.
useCallback 을 사용하면
첫번째 파라미터로 함수,
두번째로 배열이들어간다.
이 배열에 넣어놓은 object의 상태가 변하지 않는 이상 리렌더링 되지 않는다.
React.useCallback(()=>{
console.log(a)
},[a])
위와 같은경우 a 의 상태가 변할때만 이 함수를 새로 생성하고
b나 c 가 변하면 무시한다. 배열에 아무것도 넣지않으면 역시 무시되고 단 한번만 생성한다.