useEffect === componentWillUnMount || componentDidMount || componentDidUpdate
2020. 9. 9. 17:06ㆍ컴퓨터언어/React JS
728x90
반응형
useEffect()는 componentWillUnMount, componentDidMount, componentDidUpdate의 속성을 모두 가지고 있다
component가 처음 렌더링되면 useEffect()의 첫번째 인자로 들어가는 함수가 didMount에 해당하여 바로 실행된다
useEffect()의 두번째 인자에는 의존성이 들어가는데, 의존성은 처음 페이지가 렌더링 된 후 상태가 변화하는 값을 의미하며 배열 형태로 입력한다
의존성이 있다면, 해당 상태가 변화할 때마다 useEffect()의 첫번째 인자가 didUpdate로서 실행되고,
의존성이 빈배열이라면 첫번째 인자는 다시 실행되지 않는다
두번째 인자가 아예 비어 있다면 첫번째 인자는 매번 업데이트 된다(따라서 빈배열이라도 꼭 넣을 것)
마지막으로 useEffect의 willUnmount는 useEffect 자체가 실행되고 난 후 반환되는 함수에 해당한다
willUnmount는 해당 페이지를 벗어나는 등 상태를 지울 필요가 있을 때 이벤트리스너를 지워주는 역할을 한다
import React, {useEffect, useRef} from "react";
/* useRef === document.getElementById */
const useClick = onClick => {
const element = useRef();
useEffect(() => {
// didMount || didUpdate(dep 있을 때는 didUpdate만 호출)
// sayHello를 가진 Component인 UseClick이 Mount 되었을 때 click 이벤트 추가해주기
if (element.current) {
element.current.addEventListener("click", onClick)
}
// willUnmount
// componentWillUnmount 될 때 click 이벤트 삭제해주기
// useEffect()에게 반환되는 함수는 willUnmount 일때 호출된다
return () => {
if (element.current) {
element.current.removeEventListener("click", onClick)
}
}
}, [])
return element;
}
const UseClick = () => {
const sayHello = () => console.log("Hello");
const element = useClick(sayHello);
return (
<div>
<span>useClick</span>
<button ref={element}>Hello</button>
</div>
)
}
export default UseClick;
728x90
반응형
'컴퓨터언어 > React JS' 카테고리의 다른 글
[Spread Operator] ...을 이용하여 서로 다른 배열이나 객체를 합치자 (0) | 2020.05.24 |
---|---|
[Complex State] useState가 중복되면 {}로 관리한다 (0) | 2020.05.24 |
[Controlled Component] 서로 같은 변화를 담당하는 HTML 요소들은 같은 출처의 state 변수를 value로 갖는다 (0) | 2020.05.24 |
[Hook] 유저와의 UI 반응을 위한 상태관리 with Functional Components (0) | 2020.05.23 |
[Map Function] 배열의 원소마다 함수를 각각 실행시켜주자 (0) | 2020.05.19 |