Tech is created to fix problem

[React] 쌩초보가 반드시 겪는 오류 : 즉시실행함수 본문

React.js

[React] 쌩초보가 반드시 겪는 오류 : 즉시실행함수

furaha 2023. 9. 26. 15:54
반응형

 

Q. index.js 에서 ReactDOM이 뭘까?

 

ReactDOM 은 라이브러리이다. 돔 조작하는 라이브러리

React 도 사용자 UI 를 만들기 위한 라이브러리,

React-Router-Dom 도 라우팅을 관리하기 위한 라이브러리,

Styled-component 도 CSS-in-JS 라이브러리

 

알고보면 리액트는 전부 다 라이브러리의 조합이다,,

 

 


 

 

 

버튼에 이벤트를 걸어줄 때,

() =>  화살표 함수 말고 즉시실행함수로 했더니

렌더링 중에 상태 업데이트를 피하라는 오류가 났다!!

예전에 리액트 배웠을 때도, 항상 처음에 접했던 오류같다.

 

<button className='delete-btn' onClick={handleDelete(expense.id)}>삭제</button> //즉시실행(에러)
<button className='delete-btn' onClick={() => {handleDelete(expense.id)}}>삭제</button>
react-dom.development.js:86 Warning: Cannot update a component (`App`) 
while rendering a different component (`ExpenseItem`). 
To locate the bad setState() call inside `ExpenseItem`, 
follow the stack trace as described in 
https://reactjs.org/link/setstate-in-render

    at ExpenseItem (http://localhost:3000/static/js/bundle.js:353:3)
    at div
    at ExpenseList (http://localhost:3000/static/js/bundle.js:469:3)
    at App (http://localhost:3000/static/js/bundle.js:36:82)

즉시실행함수를 사용하면 계속해서 setState 변경이 일어나서, 렌더링 중에도 계속적으로 호출되는 문제가 나타난다.

호출이 되면 렌더링이 되고 렌더링이 되면 또 호출이 되는,, 무한루프로 빠지기 때문에 반드시 익명함수로 작성해주어야 한다.

반응형