Too many re-renders. React limits the number of renders to prevent an infinite loop.

✒️ 2025-05-28 10:34 내용 수정


Too many re-renders. React limits the number of renders to prevent an infinite loop.

  let [title, titleChange] = useState(['존 윅4', '가디언즈 오브 갤럭시3', '스파이더맨:어크로스 더 스파이더버스']); // 동적 내용, html 재랜더링
  let [date, dateChange] = useState(['2023-04-12', '2023-05-03', '2023-06-21'])
  let [likeHit, likeHitChange] = useState([0, 0, 0]);
  let [detail, setDetail] = useState([false, false, false]);

// onClick으로 호출할 함수를 따로 빼서 작성했다.
  function likeUp(e) {
    let copy = [...likeHit];
    copy[e]++;
    likeHitChange(copy); 
  }

  function detailSwap(e) {
    let copy = [...detail];
    copy[e] = !copy[e];
    setDetail(copy);
  }

// 중략

{
  title.map((el, i) => {
	return(
	  <div>
		<div key={i} className="item">
		  <h3> 
			<span onClick={detailSwap(i)}>{el}</span> // 이 부분에서 문제 발생
			<span onClick={likeUp(i)}>👍</span> {likeHit[i]} // 이 부분이 문제 발생
		  </h3>
		  <p>{post}</p>
		</div>
		<div className='row'>
		{
		  // useState detail의 상태에 따라 보이거나 안보이게 설정
		  (detail[i]) ? <Detail title={title} date={date} i={i}></Detail>: null
		}
	  </div>
	</div>
	);
  })
}
{
  title.map((el, i) => {
	return(
	  <div>
		<div key={i} className="item">
		  <h3> 
			<span onClick={() => detailSwap(i)}>{el}</span> // 화살표 함수로 표현을 수정
			<span onClick={() => likeUp(i)}>👍</span> {likeHit[i]} // 화살표 함수로 표현을 수정
		  </h3>
		  <p>{post}</p>
		</div>
		<div className='row'>
		{
		  // useState detail의 상태에 따라 보이거나 안보이게 설정
		  (detail[i]) ? <Detail title={title} date={date} i={i}></Detail>: null
		}
	  </div>
	</div>
	);
  })
}