You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
한번 정의한 함수는 몇 번이고 실행이 될 수 있다. 위 코드에서는 한 번 정의한 함수 sampleFunction를 sampleFunction()의 방식으로 세 번 실행하였다.
컴포넌트의 실행
리액트의 컴포넌트는 함수이다. 따라서 한 번 정의된 컴포넌트는 여러번 다시 실행될 수 있다.
리액트는 state의 변경이 있을 때마다 컴포넌트의 export된 함수를 다시 실행한다. export default App은 App 함수가 스테이트 변경이 일어나면 다시 실행되는 함수임을 의미한다. (스테이트에 관한 내용은 후에 자세히 다루기 때문에 여기서는 일단 스킵한다.)
컴포넌트 함수가 다시 실행이 되면 브라우저에서 컴포넌트 함수의 반환되는 JSX 태그 부분만 새롭게 태그가 로딩되고 그려진다.
컴포넌트 함수는 state가 변경이 될 때 다시 실행이 되기 때문에 state의 변경된 값으로 새롭게 값을 만들어야 하는 경우라면 컴포넌트 함수 내부에 변수의 값을 정의해야 한다.
자바스크립트의 실행 방식
자바스크립트 파일은 전체 코드가 자바스크립트 엔진에 의해 읽히고 컴퓨터가 이해할 수 있는 방식으로 변경이된다. 자바스크립트 코드가 컴퓨터가 이해할 수 있는 방식으로 변경이 되면, 자바스크립트 엔진은 변경된 코드를 실행한다.
컴포넌트 함수는 state 변경에 따라 재실행이 되지만 컴포넌트 함수 바깥에 정의된 것들은 자바스크립트 파일이 엔진에 의해 실행이 될 때 값이 생성된다. 위 에제의 const style 부분이 자바스크립트 코드가 실행이 되면서 만들어진 것이고, 컴포넌트 함수가 로딩 될 때 다시 만들어질 필요가 없는 코드에 해당한다.
성능을 고려한 코드 배치
컴포넌트 함수 내부에 값을 정의하게 되면, 자바스크립트 파일의 코드를 한 번 읽을 때 만들어지면 되는 값이 컴포넌트 함수가 실행 될 때마다 만들어져야 하므로 성능상 손실이 생긴다.
물론 컴퓨터의 처리 속도가 굉장히 빠르기 때문에 리액트 정도의 코드에서는 이 성능 손실은 대부분 체감하지 못할 경우가 대부분이다.
하지만, 이런 성능상의 이점을 고려할 줄 안다면 좀 더 복잡하고 대규모의 코드를 작성할 때 문제를 해결할 수 있는 관점 중 하나를 얻을 수 있게 된다.