입문주차 때 팀과제를 통해 React 시작 전 알아야 하는 기본 개념들에 대해서 정리할 수 있었다.
주특기가 3주밖에 진행되지 않기 때문에, 알야하는 개념들은 최대한 많이 숙지하고 넘어가야겠다.
유사 객체 배열은 배열처럼 보이지만 사실 key가 숫자이고 length 값을 가지고 있는 객체를 말한다. JS에서 querySelectorAll이나 document.body.children으로 엘리먼트를 가져오면 유사 배열 객체에 담겨서 온다.
양방향 바인딩을 사용하는 경우 리렌더링은 어떻게 이루어지나?
(부모 컴포넌트 A와 자식 컴포넌트 B가 있음을 가정)
즉, 자식의 변경이 부모에게 반영되는 경우 무한 루프가 발생된다. 그렇기 때문에 리액트는 예외의 경우도 있지만 기본적으로 단방향 바인딩으로 작동한다.
이벤트 리스너는 DOM객체에서 이벤트가 발생할 경우 해당 이벤트 처리 핸들러를 추가할 수 있는 오브젝트이다.
이벤트 리스너를 이용하면 특정 DOM에 위에서 말한 Javascript 이벤트가 발생할 때 특정 함수를 호출한다.
이벤트 리스너의 경우 웹 애플리케이션 메모리 누수의 원인이 될 수 있다. 더 이상 해당 이벤트 리스너가 필요 없다고 하면 반드시 추가된 이벤트 리스너는 반드시 삭제해주어야 한다.
그럼 라이프 사이클 메서드를 사용할 수 없는 함수형 컴포넌트에서는 어떻게 event를 실행시기고 해제해야할까?
함수형 컴포넌트에서는 각각의 라이프사이클 메소드를 useEffect
하나로 통일시킬 수 있다. 대신 dependency를 선언하여 시점을 구분한다.
useEffect(() => {
console.log('hi')
}, [/* dependency 선언하는 곳 */])
빈 배열을 선언하면 최초 로드시에만 렌더링이 된다.
useEffect를 이용해서 최초 로드 시에 addEventListener를 사용하여 이벤트를 추가해주면 이벤트 감지가 시작된다.
useEffect(() => {
document.addEventListener();
}, [])
이벤트를 등록하고 난 뒤 성능 저하를 방지하기 위해 컴포넌트가 언마운트 될 때 꼭 이벤트 등록을 해제해주어햐 한다. 함수형 클래스에서는 useEffect
의 내부 함수의 return값으로 removeEventListener를 통해 해제해주면 된다.
useEffect(() => {
document.addEventListener();
return () => {
document.removeEventListener();
}
}, [])
일반 HTML에서 DOM요소에 이름을 달 때는 id를 사용는데 리액트 프로젝트 내부에서 DOM에 이름을 다는 방법이 ref 이다. ref를 사용하는 시기는 DOM 을 꼭 건드려야 할 때 사용하며
° 특정 input에 포커스 주기
° 스크롤 박스 조작하기
° Canvas 요소에 그림 그리기등
위와 같은 경우에는 어쩔 수 없이 DOM에 직접적으로 접근해야한다.리액트 공식 문서에 보면
선언적으로 해결될 수 있는 문제에서는 ref 사용을 지양해야한다.
ref의 사용을 최대한 줄여야 한다고 명시되어있다.
대충 ref에 대한 설명을 하였고 사용하는 이유는?
id는 유일해야 하지만 컴포넌트 재사용을 한다면 중복될 가능성이 있다.
ref는 전역적으로 작동하지 않고 컴포넌트 내부에서만 작동한다.
하지만 리액트에서도 id를 사용할 수는 있다👍
SPA(Single Page Application)는 한 개(single)의 Page로 구성된 application 이고,
MPA(Multi Page application)는 여러 개(multi)의 Page로 구성된 application 이다.
MPA
는 새로운 페이지를 요청할 때마다
정적 리소스가 다운로드 되고,그에 맞춰 전체 페이지
를 다시 렌더링
한다.인터넷 주소창에 주소를 입력하거나, 링크를 클릭하는 등 사용자가 어떤 요청을 하면,그에 맞는 html, 이미지 등의 파일들이 전부 다운로드 되고 다시 렌더링 된다.
반면 SPA
는 웹 애플리케이션에 필요한 모든 정적 리소스를 최초
한번에
다운로드한다.그 이후 새로운
페이지 요청
이 있을 경우,페이지 갱신에 필요한 데이터만
전달받아 페이지를 갱신
한다.어떤 링크를 클릭한다고 해서 그에 관련된 모든 파일을 다운받는게 아니라,필요한 정보만 받아서 그 정보를 기준으로 업데이트 될 뿐이다.