useEffect 및 ReactStrictMode 사용: 성능 및 안정성을 위해 React 구성요소 최적화
<p>문제가 있습니다. 배열의 일부를 "loadedData"라는 새 배열에 로드하고 구성 요소가 매우 무거우므로 로드된 데이터만 표시하고 싶습니다. </p>
<p>그러나 처음 로드할 때 useEffect가 문제를 일으키는 것 같아서 많은 문제에 부딪혔습니다. 첫 번째 로드는 두 번 발생하고 첫 번째 데이터는 각 렌더링에 대해 한 번씩 배열로 푸시됩니다. "reactStrictMode"를 제거하면 예상대로 작동하지만 결과를 이해하지 못한 채 "속임수"를 사용하고 싶지 않습니다. 나보다 문제를 더 잘 이해하는 사람이 그 문제를 거기에 넣은 이유는.. </p>
<p>isLoading 상태는 초기 로드 중 두 번째 실행을 방지할 수 없습니다. 이는 이 문제와 관련된 다른 스레드에서 받은 제안입니다. </p>
<p>첫 번째 useEffect가 isLoading 상태를 무시하는 이유와 이를 처리하는 방법을 아는 사람이 있습니까? </p>
<pre class="brush:php;toolbar:false;">// 보이는 부분만 로드해 보세요. 더 이상 로드하지 마세요.
const [loadedData, setLoadedData] = useState([]);
const [isLoading, setIsLoading] = useState(false);
const addMoreData = 비동기 () =>
if (loadedData.length >= data.length) return;
const startIndex =loadedData.length;
const PreferredLoadLength = 1;
const endIndex = startIndex + PreferredLoadLength;
const newData = data.slice(startIndex, endIndex);
setLoadedData((prev) => [...prev, ...newData]);
};
// 데이터를 마운트하고 가져온 후 테이블이 아래쪽으로 스크롤되어 즉시 더 많은 데이터를 가져와야 하는지 확인합니다.
useEffect(() => {
const { scrollHeight, scrollTop, clientHeight } = tableContainerRef.current;
만약에 (
scrollHeight == 클라이언트 높이 &&
scrollTop == 0 &&
로드된데이터.길이 <
) {
const addNewDataFunction = async () =>
if (isLoading) {
반품;
}
setIsLoading(true);
addMoreData()를 기다립니다.
setIsLoading(false);
};
addNewDataFunction();
}
// eslint-disable-next-line 반응 후크/exhaustive-deps
}, [data.length, selectedData.length, isLoading]);</pre>
<p><br /></p>