React에서 기본 소품 렌더 트랩을 피하는 방법
7052 단어 reacttutorialwebdevjavascript
뭐야?
다음과 같은 기본 소품이 있는 구성 요소가 있다고 가정해 보겠습니다.
import React, { useEffect, useState } from "react";
const RerenderChild = ({ value = [] }) => {
const [valueFromProp, setValueFromProp] = useState([]);
useEffect(() => {
setValueFromProp(value);
}, [value]);
return (
<div>
{/* ...component */}
</div>
);
};
export default RerenderChild;
value
prop이 null(호출 구성 요소에 의해 설정되지 않음)일 때마다 useEffect
로 인해 구성 요소가 무한히 렌더링됩니다. 이것이 기본 소품 렌더 트랩입니다. 우리는 브라우저 콘솔에서 이와 같은 것을 얻습니다.왜 일어나는가
value
소품에 대한 값을 제공하지 않으면 인수로 제공된 기본값을 사용합니다. 이 경우에는 []
입니다. 그러면 useEffect
상태를 업데이트하는 valueFromProp
후크가 트리거됩니다. 상태 변경으로 인해 구성 요소가 다시 렌더링됩니다.이제 구성 요소가 다시 렌더링될 때 기본 값인 새 prop 값을 사용합니다. 그러면
useEffect
가 다시 트리거되고 전체 주기가 반복됩니다. 이것이 우리가 무한 루프로 끝나는 이유입니다.해결책
기본 prop 값을 컴포넌트 정의의 일부로 만들어야 합니다. 우리는 이러한 방법으로 그렇게 할 수 있습니다.
1. defaultProps 속성을 사용합니다.
구성 요소의 defaultProps property 을 사용하여 기본 소품 값을 설정할 수 있습니다. 우리의 구성 요소는 이제
import React, { useEffect, useState } from "react";
const RerenderChild = ({ value }) => {
const [valueFromProp, setValueFromProp] = useState([]);
useEffect(() => {
setValueFromProp(value);
}, [value]);
return (
<div>
{/* ...component */}
</div>
);
};
RerenderChild.defaultProps = {
value: [],
};
export default RerenderChild;
2. 기본 소품을 상수로 선언합니다.
구성 요소 외부에서 상수를 선언하고 기본 prop 값으로 설정할 수 있습니다.
import React, { useEffect, useState } from "react";
const DEFAULT_VALUE = [];
const RerenderChild = ({ value = DEFAULT_VALUE }) => {
const [valueFromProp, setValueFromProp] = useState([]);
useEffect(() => {
setValueFromProp(value);
}, [value]);
return (
<div>
{/* ...component */}
</div>
);
};
export default RerenderChild;
이것이 무한 루프를 피하는 데 도움이 되기를 바랍니다. 감사합니다 😊.
Reference
이 문제에 관하여(React에서 기본 소품 렌더 트랩을 피하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rhuzaifa/how-to-avoid-default-props-render-trap-in-react-4hon텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)