useLayoutEffect()
는 React Hooks의 하나로서, 컴포넌트의 렌더링이 완료된 직후에 실행되는 함수입니다. 이 함수는 일반적으로 DOM 노드의 크기나 위치와 같은 레이아웃 변경을 수행하기 위해 사용됩니다. useEffect()
와 비슷하지만, useLayoutEffect()
는 렌더링 직후에 실행되므로 화면에 렌더링된 이후에 바로 업데이트된 레이아웃 값을 가져올 수 있습니다.
useLayoutEffect()
는 다음과 같이 사용할 수 있습니다.
import React, { useLayoutEffect, useRef } from 'react';
function MyComponent() {
const ref = useRef(null);
useLayoutEffect(() => {
// ref.current의 값을 사용한 레이아웃 업데이트를 수행합니다.
// 이 코드는 컴포넌트가 렌더링된 직후에 실행됩니다.
}, [ref.current]);
return <div ref={ref}>Hello, world!</div>;
}
이 코드에서는 useRef()
를 사용하여 div
엘리먼트의 참조를 생성합니다. 그리고 useLayoutEffect()
를 사용하여 ref.current
값의 변경을 감지하고, 해당 값이 변경될 때마다 레이아웃 업데이트를 수행합니다. 이렇게 함으로써, div
엘리먼트의 위치나 크기와 같은 레이아웃 정보를 가져올 수 있습니다.
useLayoutEffect()
를 사용할 때 주의할 점은, 이 함수가 렌더링 직후에 실행되므로, 함수의 실행 시간이 길어지면 브라우저의 성능에 영향을 미칠 수 있다는 것입니다. 따라서, 이 함수에서는 가능한한 빠른 코드를 작성하는 것이 좋습니다.
React 18부터는 useEffect()
와 useLayoutEffect()
대신에 useEffectLayout()
함수가 추가될 예정입니다. 이 함수는 useEffect()
와 useLayoutEffect()
의 기능을 모두 포함하며, useEffect()
처럼 렌더링 후에 비동기로 실행되는 기능도 지원합니다. 이 함수는 다음과 같이 사용할 수 있습니다.
import React, { useEffectLayout, useRef } from 'react';
function MyComponent() {
const ref = useRef(null);
useEffectLayout(() => {
// ref.current의 값을 사용한 레이아웃 업데이트를 수행합니다.
// 이 코드는 렌더링된 이후 비동기로 실행됩니다.
}, [ref.current]);
return <div ref={ref}>Hello, world!</div>;
}
아래는 useLayoutEffect()
를 사용한 예시 코드입니다. useLayoutEffect()
를 사용하여 div
엘리먼트의 크기와 위치를 업데이트합니다.
import React, { useLayoutEffect, useRef, useState } from 'react';
function MyComponent() {
const ref = useRef(null);
const [width, setWidth] = useState(0);
const [height, setHeight] = useState(0);
useLayoutEffect(() => {
const { current } = ref;
const { width, height } = current.getBoundingClientRect();
setWidth(width);
setHeight(height);
}, [ref.current]);
return (
<div ref={ref}>
<p>Width: {width}px</p>
<p>Height: {height}px</p>
</div>
);
}
이 코드에서는 useRef()
를 사용하여 div
엘리먼트의 참조를 생성합니다. 그리고 useLayoutEffect()
를 사용하여 ref.current
값의 변경을 감지하고, 해당 값이 변경될 때마다 div
엘리먼트의 크기와 위치 정보를 가져와서 setWidth()
와 setHeight()
를 호출하여 업데이트합니다. 이렇게 함으로써, div
엘리먼트의 크기와 위치 정보를 가져와서 화면에 출력합니다.
useLayoutEffect()
는 컴포넌트가 렌더링된 이후에 실행되므로, DOM 업데이트와 관련된 작업에서 유용합니다. 예를 들어, 모달 다이얼로그나 툴팁과 같은 컴포넌트를 구현할 때, useLayoutEffect()
를 사용하여 해당 컴포넌트의 위치와 크기 정보를 업데이트할 수 있습니다.
내저장소 바로가기 luxury515
'Front-end > React.js' 카테고리의 다른 글
<search> 태크 (0) | 2023.05.16 |
---|---|
React Hook : useDebugValue() (0) | 2023.04.15 |
React Hook : useImperativeHandle() (0) | 2023.04.15 |
React Hook : useRef() (0) | 2023.04.15 |
React Hook : useMemo() (0) | 2023.04.15 |