1.1 자바스크립트 동등 비교
리액트의 가상 DOM과 실제 DOM의 비교, 컴포넌트 렌더링판단, 변수나 함수의 메모이제이션 등이 전부 자바스크립트의 동등 비교를 기반으로 함
자바스크립트 타입 중 객체 타입이 있는데 객체 타입은 참조를 전달한다고 해서 참조 타입이라고도 불린다.
이 객체 타입을 통해 자바스크립트 동등 비교의 특징이 나타남
원시타입과 객체타입의 값을 저장하는 방식의 차이가 동등 비교를 할 때 차이를 만드는 원인이 됨
또 다른 비교공식으로 Object.is 가 있음(ES6부터 도입)
리액트는 이 Object.is를 통해 동등 비교를 함
ObjectIs를 기반으로 shallowEqual이라는 함수를 만들어 사용하는데 이 함수는 모든 키의 값이 동일하면 true 아니면 false를 반환함
1.2 함수
** 즉시실행 함수, 고차함수
1.3 클래스
자바스크립트에서 클래스는 특정한 객체를 만들기 위한 일종의 템플릿
특정한 형태의 객체를 반복적으로 만들기 위해 사용되는 것
1.4 클로저
클로저는 함수와 함수가 선언된 어휘적 환경
변수의 유효 범위, 스코프
리액트에서의 클로저
1.5 이벤트루프, 비동기 통신의 이해
자바스크립트는 싱글스레드 언어로서 작업을 직렬 방식으로 처리하지만 비동기 처리로 병렬 방식으로 처리가 가능함
태스크 큐 - setTimeout, setInterval, setImmediate
마이크로 태스크 큐 - process.nextTick, Promises, queueMicroTask
** 마이크로 태스크 큐가 태스크 큐보다 우선권을 가짐
1.6 리액트에서 자주 사용하는 자바스크립트 문법
바벨 - 자바스크립트 최신 문법을 다양한 브라우저에서도 일관적으로 지원할 수 있도록 코드를 트랜스파일함
1.7 선택이 아닌 필수, 타입스크립트
이 책에서는 거의 타입스크립트 충신이라고 생각이 들 정도로 타입스크립트를 강력 추천함
타입스크립트란 기존 자바스크립트 문법에 타입을 가미한 것
TypeScript is JavaScript with syntax for types
자바스크립트는 타입 체크를 런타임에서 수행하지만 타입스크립트는 빌드(트랜스파일) 타임에 수행
==> 타입스크립트는 자바스크립트의 슈퍼셋으로서 함수의 반환 타입, 배열, enum 등 사용하기 어려웠던 타입 관련 작업 처리 가능
리액트 코드 효과적으로 작성하기 위한 타입스크립트 활용
any 대신 unknown활용
any를 사용시 타입스크립트에서 에러를 발생시키지 않고 런타임시 에러를 발생시키기 때문에 타입스크립트 이점을 없애버림
unknown은 말 그대로 알 수 없는 값이기 때문에 타입을 좁혀나갈 수 있음
타입 가드 적극 활용
- instanceof - 지정 인스턴스가 특정 클래스의 인스턴스인지 확인가능
- typeof - 특정 요소에 대한 자료형 확인
- in - property in object로 사용, 어떤 객체에 키가 존재하는지 확인하는 용도로 사용
- 제네릭 - 함수나 클래스 내부에서 단일 타입이 아닌 다양한 타입에 대응할 수 있도록 도와줌,
=> 리액트에서 제네릭을 사용하는 곳은 useState => useState에 제네릭 타입 선언시 기본값 선언을 좀 더 명확하게 할 수 있음
- 인덱스 시그니처 - 객체의 키를 정의하는 방식
tsconfig.json 작성
JSDOc, @ts-check 활용하여 점진적 전환
타입 기반 라이브러리 사용 위한 @types 모듈 설치
파일 단위로 전환