개발/React Native
[에러] Too many re-renders. React limits the number of renders to prevent an infinite loop.
세크레투스
2023. 6. 27. 18:50
반응형
SMALL
1. 어떤 에러인가?
리액트 무한루프 렌더링.
props로 전달받은 변수를 setState에 넣을 때 무한루프가 걸려서 나오는 에러이다.
2. 에러 핸들링 방법
useEffect를 사용하여 sideEffect로부터 보호한다.
<에러 난 코드(예시)>
import React, {useState, useEffect} from 'react';
import {useRoute} from '@react-navigation/native';
export const Test = () => {
const route = useRoute();
const [isVisible, setIsVisible] = useState(true);
if(route.params !== undefined) {
setIsVisible(route.params?.isVisible);
}
...
}
<에러 해결 코드(예시)>
import React, {useState, useEffect} from 'react';
import {useRoute} from '@react-navigation/native';
export const Test = () => {
const route = useRoute();
const [isVisible, setIsVisible] = useState(true);
useEffect(() => {
if(route.params !== undefined) {
setIsVisible(route.params?.isVisible);
}
}, [route.params]);
...
}
3. 에러 이유
다음은 리액트의 렌더링 조건이다.
1. state 변경이 있을 때
2. 부모 컴포넌트가 렌더링 될 때
3. 새로운 props가 들어올 때
4. shouldComponentUpdate에서 true가 반환될 때
5. forceUpdate가 실행될 때
React의 useState 렌더링은 비동기로 이루어진다.
때문에 개발자의 예측대로 렌더링이 되지 않고 꼬여버린다.
반응형
LIST