Reactμ useLayoutEffect ν μ λν ν¬κ΄μ μΈ κ°μ΄λ. λκΈ°μ DOM μ‘°μμ μν μ¬μ© μ¬λ‘, μ±λ₯ μν₯, λͺ¨λ² μ¬λ‘λ₯Ό νꡬν©λλ€.
React useLayoutEffect: λκΈ°μ DOM μ λ°μ΄νΈ λ§μ€ν°νκΈ°
Reactμ useLayoutEffect ν
μ λκΈ°μ μΈ DOM μ‘°μμ μννκΈ° μν κ°λ ₯ν λꡬμ
λλ€. λ ννκ² μ¬μ©λλ useEffectμ λ¬λ¦¬, useLayoutEffectλ λΈλΌμ°μ κ° νλ©΄μ 그리기 μ μ μ€νλ©λλ€. μ΄λ¬ν νΉμ§ λλΆμ DOMμ μΈ‘μ νκ±°λ μκ°μ λ μ΄μμμ μν₯μ λ―ΈμΉλ λ³κ²½μ μνν΄μΌ νλ μλ리μ€μ μ΄μμ μ΄λ©°, κ±°μ¬λ¦¬λ μκ°μ κ²°ν¨μ λ°©μ§ν μ μμ΅λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λμμλ useLayoutEffectμ 볡μ‘ν λ΄μ©λ€μ νꡬνλ©°, μ¬μ© μ¬λ‘, μ±λ₯ κ³ λ €μ¬ν λ° λͺ¨λ² μ¬λ‘λ₯Ό λ€λ£Ήλλ€.
μ°¨μ΄μ μ΄ν΄νκΈ°: useLayoutEffect vs. useEffect
useLayoutEffectμ useEffectλ λͺ¨λ ν¨μν μ»΄ν¬λνΈμμ μ¬μ΄λ μ΄ννΈ(side effect)λ₯Ό μννλ λ° μ¬μ©λλ React ν
μ
λλ€. νμ§λ§ μ€ν μμ κ³Ό λμ λ°©μμμ μλΉν μ°¨μ΄κ° μμ΅λλ€:
- useEffect: λΈλΌμ°μ κ° νλ©΄μ κ·Έλ¦° νμ λΉλκΈ°μ μΌλ‘ μ€νλ©λλ€. λ°μ΄ν° κ°μ Έμ€κΈ°, ꡬλ μ€μ , λλ λ μ΄μμμ μν₯μ μ£Όμ§ μλ λ°©μμ μ§μ μ μΈ DOM μ‘°μκ³Ό κ°μ λλΆλΆμ μ¬μ΄λ μ΄ννΈμ κΈ°λ³Έμ μΌλ‘ μ νλ©λλ€. λΉλκΈ°μ μ΄κΈ° λλ¬Έμ λΈλΌμ°μ λ λλ§μ μ°¨λ¨νμ§ μμ΅λλ€.
- useLayoutEffect: DOMμ΄ μ λ°μ΄νΈλ ν, λΈλΌμ°μ κ° νλ©΄μ 그리기 μ μ λκΈ°μ μΌλ‘ μ€νλ©λλ€. μ΄λ¬ν μ°¨λ¨(blocking) λ°©μ λλΆμ μ νν DOM μΈ‘μ μ΄ νμνκ±°λ λκΈ°μ μΈ λ μ΄μμ λ³κ²½μ΄ νμν μμ μ μ ν©ν©λλ€.
ν΅μ¬μ μΈ μ°¨μ΄λ μ€ν μμ μ μμ΅λλ€. useEffectλ λΉμ°¨λ¨(non-blocking) λ°©μμΌλ‘, λΈλΌμ°μ κ° νλ©΄μ λΉ λ₯΄κ² κ·Έλ¦¬κ³ λ°μμ±μ κ°μ νλλ‘ ν©λλ€. λ°λ©΄μ useLayoutEffectλ μλ£λ λκΉμ§ 그리기λ₯Ό μ°¨λ¨νλ―λ‘, κ³Όλνκ² μ¬μ©λ κ²½μ° μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
useLayoutEffectλ μΈμ μ¬μ©ν΄μΌ ν κΉ: μ€μ μ¬μ© μ¬λ‘
useLayoutEffectλ λ§€λλ¬μ΄ μ¬μ©μ κ²½νμ μν΄ μ λ°ν DOM μ‘°μμ΄ μ€μν νΉμ μλ리μ€μμ λΉμ λ°ν©λλ€. μΌλ°μ μΈ μ¬μ© μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
1. νμΈν μ DOM μΈ‘μ κ° μ½κΈ°
λμ μμμ ν¬κΈ°μ μ¬μ© κ°λ₯ν λ·°ν¬νΈ 곡κ°μ κΈ°λ°μΌλ‘ λμ μΌλ‘ μμΉλ₯Ό μ ν΄μΌ νλ 컀μ€ν ν΄ν μ»΄ν¬λνΈλ₯Ό λ§λ λ€κ³ μμν΄ λ³΄μΈμ. ν΄νμ΄ νλ©΄μ λ²μ΄λμ§ μλλ‘ λ λλ§λκΈ° μ μ λμ μμμ ν¬κΈ°λ₯Ό μ½μ΄μΌ ν©λλ€.
λ€μμ κ°λ¨ν μμ μ λλ€:
import React, { useRef, useLayoutEffect, useState } from 'react';
function Tooltip({
children,
content,
}) {
const targetRef = useRef(null);
const tooltipRef = useRef(null);
const [position, setPosition] = useState({
top: 0,
left: 0,
});
useLayoutEffect(() => {
if (!targetRef.current || !tooltipRef.current) return;
const targetRect = targetRef.current.getBoundingClientRect();
const tooltipRect = tooltipRef.current.getBoundingClientRect();
// μ΄μμ μΈ μμΉ κ³μ° (μ: λμ μμ μμͺ½)
const calculatedTop = targetRect.top - tooltipRect.height - 5; // 5px κ°κ²©
const calculatedLeft = targetRect.left + (targetRect.width / 2) - (tooltipRect.width / 2);
setPosition({
top: calculatedTop,
left: calculatedLeft,
});
}, [content]); // contentκ° λ³κ²½λ λ λ€μ μ€ν
return (
<>
{children}
{content}
>
);
}
export default Tooltip;
μ΄ μμ μμ useLayoutEffectλ getBoundingClientRect()λ₯Ό μ¬μ©νμ¬ λμ μμμ ν΄ν μ체μ ν¬κΈ°λ₯Ό κ°μ Έμ€λ λ° μ¬μ©λ©λλ€. μ΄ μ 보λ ν΄νμ μ΅μ μμΉλ₯Ό κ³μ°νλ λ° μ¬μ©λ©λλ€. useLayoutEffectλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ ν΄νμ΄ λ λλ§λκΈ° μ μ μ¬λ°λ₯΄κ² μμΉνλλ‘ λ³΄μ₯νμ¬ μκ°μ μΈ κΉλ°μμ΄λ μμΉ μ¬μ‘°μ μ λ°©μ§ν©λλ€.
2. DOM μνμ κΈ°λ°ν μ€νμΌ λκΈ°μ μ μ©
νμ΄μ§μ λ€λ₯Έ μμ λμ΄μ λ§μΆ° ν μμμ λμ΄λ₯Ό λμ μΌλ‘ μ‘°μ ν΄μΌ νλ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ. μ΄λ λμΌν λμ΄μ μ΄μ λ§λ€κ±°λ 컨ν μ΄λ λ΄μμ μμλ₯Ό μ λ ¬νλ λ° μ μ©ν μ μμ΅λλ€.
import React, { useRef, useLayoutEffect } from 'react';
function EqualHeightColumns({
leftContent,
rightContent,
}) {
const leftRef = useRef(null);
const rightRef = useRef(null);
useLayoutEffect(() => {
if (!leftRef.current || !rightRef.current) return;
const leftHeight = leftRef.current.offsetHeight;
const rightHeight = rightRef.current.offsetHeight;
const maxHeight = Math.max(leftHeight, rightHeight);
leftRef.current.style.height = `${maxHeight}px`;
rightRef.current.style.height = `${maxHeight}px`;
}, [leftContent, rightContent]);
return (
{leftContent}
{rightContent}
);
}
export default EqualHeightColumns;
μ¬κΈ°μ useLayoutEffectλ μΌμͺ½κ³Ό μ€λ₯Έμͺ½ μ΄μ λμ΄λ₯Ό μ½μ λ€μ, λ μ΄ λͺ¨λμ μ΅λ λμ΄λ₯Ό λκΈ°μ μΌλ‘ μ μ©νλ λ° μ¬μ©λ©λλ€. μ΄λ κ² νλ©΄ λ΄μ©μ΄ λμ μΌλ‘ λ³κ²½λλλΌλ μ΄μ΄ νμ μ λ ¬λ μνλ₯Ό μ μ§ν μ μμ΅λλ€.
3. μκ°μ κ²°ν¨ λ° κΉλ°μ λ°©μ§
DOM μ‘°μμ΄ λμ λλ μκ°μ λ¬Έμ λ₯Ό μΌμΌν€λ μν©μμ useLayoutEffectλ μ΄λ¬ν λ¬Έμ λ₯Ό μννλ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬μ©μ μ
λ ₯μ λ°λΌ μμμ ν¬κΈ°λ₯Ό λμ μΌλ‘ μ‘°μ νλ κ²½μ°, useEffectλ₯Ό μ¬μ©νλ©΄ μμκ° μ²μμλ μλͺ»λ ν¬κΈ°λ‘ λ λλ§λ ν λ€μ μ
λ°μ΄νΈμμ μμ λλ©΄μ μ μ κΉλ°μ΄λ νμμ΄ λ°μν μ μμ΅λλ€. useLayoutEffectλ μμκ° μ²μλΆν° μ¬λ°λ₯Έ ν¬κΈ°λ‘ λ λλ§λλλ‘ λ³΄μ₯νμ¬ μ΄λ₯Ό λ°©μ§ν μ μμ΅λλ€.
μ±λ₯ κ³ λ €μ¬ν: μ μ€νκ² μ¬μ©νκΈ°
useLayoutEffectλ μ μ©ν λꡬμ΄μ§λ§, μ μ€νκ² μ¬μ©νλ κ²μ΄ μ€μν©λλ€. λΈλΌμ°μ λ λλ§μ μ°¨λ¨νκΈ° λλ¬Έμ κ³Όλνκ² μ¬μ©νλ©΄ μ±λ₯ λ³λͺ© νμκ³Ό λλ¦° μ¬μ©μ κ²½νμ μ΄λν μ μμ΅λλ€.
1. 볡μ‘ν κ³μ° μ΅μν
useLayoutEffect λ΄μμ κ³μ° λΉμ©μ΄ λ§μ΄ λλ μμ
μ μννμ§ λ§μΈμ. 볡μ‘ν κ³μ°μ΄ νμν κ²½μ°, κ²°κ³Όλ₯Ό λ©λͺ¨μ΄μ μ΄μ
(memoizing)νκ±°λ μΉ μ컀(web worker)μ κ°μ κΈ°μ μ μ¬μ©νμ¬ λ°±κ·ΈλΌμ΄λ μμ
μΌλ‘ μ°κΈ°νλ κ²μ κ³ λ €νμΈμ.
2. μ¦μ μ λ°μ΄νΈ νΌνκΈ°
useLayoutEffectκ° μ€νλλ νμλ₯Ό μ ννμΈμ. useLayoutEffectμ μμ‘΄μ±(dependencies)μ΄ μμ£Ό λ³κ²½λλ©΄ λ λλ§λ λλ§λ€ λ€μ μ€νλμ΄ μ μ¬μ μΈ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. λΆνμν μ¬μ€νμ μ΅μννλλ‘ μμ‘΄μ±μ μ΅μ ννμΈμ.
3. μ½λ νλ‘νμΌλ§
Reactμ νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ useLayoutEffectμ κ΄λ ¨λ μ±λ₯ λ³λͺ© νμμ μλ³νμΈμ. React Profilerλ useLayoutEffect ν
μμ κ³Όλν μκ°μ μλΉνλ μ»΄ν¬λνΈλ₯Ό μ°Ύμλ΄μ΄ λμμ μ΅μ ννλ λ° λμμ μ€ μ μμ΅λλ€.
useLayoutEffect λͺ¨λ² μ¬λ‘
useLayoutEffectλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νκ³ μ μ¬μ μΈ ν¨μ μ νΌνλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ:
1. νμν λλ§ μ¬μ©νκΈ°
useEffectκ° μκ°μ κ²°ν¨ μμ΄ λμΌν κ²°κ³Όλ₯Ό μ»μ μ μλμ§ μλ¬Έν΄ λ³΄μΈμ. useLayoutEffectλ λκΈ°μ DOM μ‘°μμ΄ λ°λμ νμν μν©μλ§ μ¬μ©ν΄μΌ ν©λλ€.
2. κ°κ²°νκ³ μ§μ€μ μΌλ‘ μ μ§νκΈ°
useLayoutEffect λ΄μ μ½λλ₯Ό νμμ μΈ DOM μ‘°μμΌλ‘λ§ μ ννμΈμ. ν
λ΄μμ κ΄λ ¨ μλ μμ
μ΄λ 볡μ‘ν λ‘μ§μ μννμ§ λ§μΈμ.
3. μμ‘΄μ± λ°°μ΄ μ 곡νκΈ°
νμ useLayoutEffectμ μμ‘΄μ± λ°°μ΄μ μ 곡νμΈμ. μ΄λ Reactμκ² μΈμ μ΄ννΈλ₯Ό λ€μ μ€νν μ§ μλ €μ€λλ€. μμ‘΄μ± λ°°μ΄μ μλ΅νλ©΄ μ΄ννΈκ° λͺ¨λ λ λλ§μμ μ€νλμ΄ μ±λ₯ λ¬Έμ μ μκΈ°μΉ μμ λμμ μ λ°ν μ μμ΅λλ€. μ΄λ€ λ³μλ₯Ό μμ‘΄μ± λ°°μ΄μ ν¬ν¨ν΄μΌ ν μ§ μ μ€νκ² κ³ λ €νμΈμ. λΆνμν μμ‘΄μ±μ ν¬ν¨νλ©΄ μ΄ννΈμ λΆνμν μ¬μ€νμ μ λ°ν μ μμ΅λλ€.
4. μ μ ν μμ μ μ 리(Clean Up)νκΈ°
λ§μ½ useLayoutEffectκ° μ΄λ²€νΈ 리μ€λλ ꡬλ
κ³Ό κ°μ 리μμ€λ₯Ό μ€μ νλ€λ©΄, μ 리 ν¨μ(cleanup function)μμ λ°λμ μ 리ν΄μΌ ν©λλ€. μ΄λ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ μ»΄ν¬λνΈκ° λ§μ΄νΈ ν΄μ λ λ μ¬λ°λ₯΄κ² λμνλλ‘ λ³΄μ₯ν©λλ€.
5. λμ κ³ λ €νκΈ°
useLayoutEffectμ μμ‘΄νκΈ° μ μ λμμ μΈ ν΄κ²°μ±
μ νμν΄ λ³΄μΈμ. μλ₯Ό λ€μ΄, CSSλ₯Ό μ¬μ©νκ±°λ μ»΄ν¬λνΈ κ³μΈ΅μ μ¬κ΅¬μ±νμ¬ μνλ κ²°κ³Όλ₯Ό μ»μ μλ μμ΅λλ€.
λ€μν λ¬Ένμ λ§₯λ½μμμ μμ
useLayoutEffect μ¬μ© μμΉμ λ€μν λ¬Ένμ λ§₯λ½μμ μΌκ΄λκ² μ μ§λ©λλ€. κ·Έλ¬λ νΉμ μ¬μ© μ¬λ‘λ μ ν리μΌμ΄μ
κ³Ό μ¬μ©μ μΈν°νμ΄μ€ κ΄λ‘μ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
1. μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ (RTL) λ μ΄μμ
μλμ΄μ νλΈλ¦¬μ΄ κ°μ RTL μΈμ΄μμλ μ¬μ©μ μΈν°νμ΄μ€μ λ μ΄μμμ΄ μ’μ° λ°μ λ©λλ€. RTL λ μ΄μμμμ μμλ₯Ό λμ μΌλ‘ λ°°μΉν λ, useLayoutEffectλ μμκ° νλ©΄μ μ€λ₯Έμͺ½ κ°μ₯μ리λ₯Ό κΈ°μ€μΌλ‘ μ¬λ°λ₯΄κ² λ°°μΉλλλ‘ λ³΄μ₯νλ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, ν΄νμ μΌμͺ½μμ μ€λ₯Έμͺ½(LTR) λ μ΄μμμμλ λμ μμμ μ€λ₯Έμͺ½μ μμΉνμ§λ§, RTL λ μ΄μμμμλ μΌμͺ½μ μμΉν΄μΌ ν μ μμ΅λλ€.
2. 볡μ‘ν λ°μ΄ν° μκ°ν
μΈν°λν°λΈ λ°μ΄ν° μκ°νλ₯Ό λ§λλ κ²μ μ’
μ’
볡μ‘ν DOM μ‘°μμ ν¬ν¨ν©λλ€. useLayoutEffectλ μκ°νμ λ€λ₯Έ λΆλΆλ€ κ°μ μ
λ°μ΄νΈλ₯Ό λκΈ°ννμ¬ λ°μ΄ν°κ° μ ννκ³ μκ°μ κ²°ν¨ μμ΄ νμλλλ‘ νλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄λ λκ·λͺ¨ λ°μ΄ν° μΈνΈλ μ¦μ μ
λ°μ΄νΈκ° νμν 볡μ‘ν μ°¨νΈλ₯Ό λ€λ£° λ νΉν μ€μν©λλ€.
3. μ κ·Όμ± κ³ λ €μ¬ν
μ κ·Όμ± λμ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆν λ, useLayoutEffectλ ν¬μ»€μ€κ° μ¬λ°λ₯΄κ² κ΄λ¦¬λκ³ λ³΄μ‘° κΈ°μ μ΄ νμν μ 보μ μ κ·Όν μ μλλ‘ λ³΄μ₯νλ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, λͺ¨λ¬ λν μμκ° μ΄λ¦΄ λ useLayoutEffectλ₯Ό μ¬μ©νμ¬ λͺ¨λ¬ λ΄μ 첫 λ²μ§Έ ν¬μ»€μ€ κ°λ₯ν μμλ‘ ν¬μ»€μ€λ₯Ό μ΄λμν€κ³ ν¬μ»€μ€κ° λͺ¨λ¬μ λ²μ΄λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
ν΄λμ€ μ»΄ν¬λνΈμμ λ§μ΄κ·Έλ μ΄μ νκΈ°
ν΄λμ€ μ»΄ν¬λνΈμμ λ§μ΄κ·Έλ μ΄μ
νλ κ²½μ°, useLayoutEffectλ λκΈ°μ DOM μ‘°μμ΄ νμν λ componentDidMount λ° componentDidUpdateμ ν΄λΉνλ ν¨μν μ»΄ν¬λνΈμ κΈ°λ₯μ
λλ€. μ΄λ¬ν μλͺ
μ£ΌκΈ° λ©μλ λ΄μ λ‘μ§μ useLayoutEffectλ‘ λ체νμ¬ λμΌν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€. componentWillUnmountμ μ μ¬νκ² ν
μ λ°ν ν¨μμμ μ 리λ₯Ό μ²λ¦¬νλ κ²μ μμ§ λ§μΈμ.
useLayoutEffect λ¬Έμ λλ²κΉ νκΈ°
useLayoutEffectμ κ΄λ ¨λ λ¬Έμ λ₯Ό λλ²κΉ
νλ κ²μ μ΄λ €μΈ μ μμΌλ©°, νΉν μ±λ₯μ μν₯μ λ―ΈμΉ λ κ·Έλ μ΅λλ€. λ€μμ λͺ κ°μ§ νμ
λλ€:
1. React κ°λ°μ λꡬ μ¬μ©νκΈ°
React κ°λ°μ λꡬλ useLayoutEffect ν
μ μ€νμ ν¬ν¨νμ¬ μ»΄ν¬λνΈμ λμμ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν©λλ€. κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈμ propsμ stateλ₯Ό κ²μ¬νκ³ useLayoutEffectκ° μΈμ μ€νλλμ§ νμΈν μ μμ΅λλ€.
2. μ½μ λ‘κ·Έ μΆκ°νκΈ°
useLayoutEffect λ΄μ μ½μ λ‘κ·Έλ₯Ό μΆκ°νλ©΄ λ³μ κ°μ μΆμ νκ³ μ΄λ²€νΈ μμλ₯Ό μ΄ν΄νλ λ° λμμ΄ λ μ μμ΅λλ€. κ·Έλ¬λ νΉν νλ‘λμ
νκ²½μμλ κ³Όλν λ‘κΉ
μ΄ μ±λ₯μ λ―ΈμΉλ μν₯μ μΌλμ λμ΄μΌ ν©λλ€.
3. μ±λ₯ λͺ¨λν°λ§ λꡬ μ¬μ©νκΈ°
μ±λ₯ λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ
μ μ λ°μ μΈ μ±λ₯μ μΆμ νκ³ useLayoutEffectμ κ΄λ ¨λ μ μ¬μ μΈ λ³λͺ© νμμ μλ³νμΈμ. μ΄λ¬ν λꡬλ μ½λμ λ€λ₯Έ λΆλΆμμ μμλ μκ°μ λν μμΈν μ 보λ₯Ό μ 곡νμ¬ μ΅μ νκ° νμν μμμ μ νν μ°Ύμλ΄λ λ° λμμ΄ λ©λλ€.
κ²°λ‘ : λκΈ°μ DOM μ λ°μ΄νΈ λ§μ€ν°νκΈ°
useLayoutEffectλ Reactμμ λκΈ°μ DOM μ‘°μμ μνν μ μκ² ν΄μ£Όλ κ°λ ₯ν ν
μ
λλ€. κ·Έ λμ, μ¬μ© μ¬λ‘ λ° μ±λ₯ μν₯μ μ΄ν΄ν¨μΌλ‘μ¨, λ§€λλ½κ³ μκ°μ μΌλ‘ λ§€λ ₯μ μΈ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλ λ° ν¨κ³Όμ μΌλ‘ νμ©ν μ μμ΅λλ€. νλ₯ν μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄ μ μ€νκ² μ¬μ©νκ³ , λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©°, νμ μ±λ₯μ μ°μ μνλ κ²μ κΈ°μ΅νμΈμ. useLayoutEffectλ₯Ό λ§μ€ν°ν¨μΌλ‘μ¨ React κ°λ° λ¬΄κΈ°κ³ μ κ·μ€ν λꡬλ₯Ό μΆκ°νκ³ λ³΅μ‘ν UI λ¬Έμ λ₯Ό μμ μκ² ν΄κ²°ν μ μκ² λ©λλ€.
μ΄ κ°μ΄λλ useLayoutEffectμ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡νμ΅λλ€. React 곡μ λ¬Έμλ₯Ό λ νμνκ³ μ€μ μλ리μ€λ‘ μ€νν΄ λ³΄λ©΄ μ΄ν΄λ₯Ό λμ± κ³΅κ³ ν νκ³ νλ‘μ νΈμ μ΄ ν
μ μμ μκ² μ μ©ν μ μκ² λ κ²μ
λλ€.
useLayoutEffectλ₯Ό μ¬μ©ν λλ νμ μ¬μ©μ κ²½νκ³Ό μ μ¬μ μΈ μ±λ₯ μν₯μ κ³ λ €ν΄μΌ ν©λλ€. μ¬λ°λ₯Έ κ· νμ λ§μΆ€μΌλ‘μ¨ κΈ°λ₯μ μ΄λ©΄μλ μ±λ₯μ΄ λ°μ΄λ React μ ν리μΌμ΄μ
μ λ§λ€ μ μμ΅λλ€.