1장 리액트 프로젝트 시작하기
1.1 리액트란 무엇인가
1.2 리액트 개발 환경 직접 구축하기
1.2.1 Hello World 페이지 만들기
1.2.2 바벨 사용해 보기
1.2.3 웹팩의 기본 개념 이해하기
1.2.4 웹팩 사용해 보기
1.3 create-react-app으로 시작하기
1.3.1 create-react-app 사용해 보기
1.3.2 주요 명령어 알아보기
1.3.3 자바스크립트 지원 범위
1.3.4 코드 분할하기
1.3.5 환경 변수 사용하기
1.4 CSS 작성 방법 결정하기
1.4.1 일반적인 CSS 파일로 작성하기
1.4.2 css-module로 작성하기
1.4.3 Sass로 작성하기
1.4.4 css-in-js로 작성하기
1.5 단일 페이지 애플리케이션 만들기
1.5.1 브라우저 히스토리 API
1.5.2 react-router-dom 사용하기
2장 ES6+를 품은 자바스크립트, 매력적인 언어가 되다
2.1 변수를 정의하는 새로운 방법: const, let
2.1.1 var가 가진 문제
2.1.2 var의 문제를 해결하는 const, let
2.2 객체와 배열의 사용성 개선
2.2.1 객체와 배열을 간편하게 생성하고 수정하기
2.2.2 객체와 배열의 속성값을 간편하게 가져오기
2.3 강화된 함수의 기능
2.3.1 매개변수에 추가된 기능
2.3.2 함수를 정의하는 새로운 방법: 화살표 함수
2.4 향상된 비동기 프로그래밍 1: 프로미스
2.4.1 프로미스 이해하기
2.4.2 프로미스 활용하기
2.4.3 프로미스 사용 시 주의할 점
2.5 향상된 비동기 프로그래밍 2: async await
2.5.1 async await 이해하기
2.5.2 async await 활용하기
2.6 템플릿 리터럴로 동적인 문자열 생성하기
2.7 실행을 멈출 수 있는 제너레이터
2.7.1 제너레이터 이해하기
2.7.2 제너레이터 활용하기
3장 중요하지만 헷갈리는 리액트 개념 이해하기
3.1 상탯값과 속성값으로 관리하는 UI 데이터
3.1.1 리액트를 사용한 코드의 특징
3.1.2 컴포넌트의 속성값과 상탯값
3.1.3 컴포넌트 함수의 반환값
3.2 리액트 요소와 가상 돔
3.2.1 리액트 요소 이해하기
3.2.2 리액트 요소가 돔 요소로 만들어지는 과정
3.3 리액트 훅 기초 익히기
3.3.1 상탯값 추가하기: useState
3.3.2 컴포넌트에서 부수 효과 처리하기: useEffect
3.3.3 훅 직접 만들기
3.3.4 훅 사용 시 지켜야 할 규칙
3.4 콘텍스트 API로 데이터 전달하기
3.4.1 콘텍스트 API 이해하기
3.4.2 콘텍스트 API 활용하기
3.4.3 콘텍스트 API 사용 시 주의할 점
3.5 ref 속성값으로 자식 요소에 접근하기
3.5.1 ref 속성값 이해하기
3.5.2 ref 속성값 활용하기
3.5.3 ref 속성값 사용 시 주의할 점
3.6 리액트 내장 훅 살펴보기
3.6.1 Consumer 컴포넌트 없이 콘텍스트 사용하기: useContext
3.6.2 렌더링과 무관한 값 저장하기: useRef
3.6.3 메모이제이션 훅: useMemo, useCallback
3.6.4 컴포넌트의 상탯값을 리덕스처럼 관리하기: useReducer
3.6.5 부모 컴포넌트에서 접근 가능한 함수 구현하기: useImperativeHandle
3.6.6 기타 리액트 내장 훅: useLayoutEffect, useDebugValue
4장 리액트 실전 활용법
4.1 가독성과 생산성을 고려한 컴포넌트 코드 작성법
4.1.1 추천하는 컴포넌트 파일 작성법
4.1.2 속성값 타입 정의하기: prop-types
4.1.3 가독성을 높이는 조건부 렌더링 방법
4.1.4 관심사 분리를 위한 프레젠테이션, 컨테이너 컴포넌트 구분하기
4.2 useEffect 훅 실전 활용법
4.2.1 의존성 배열을 관리하는 방법
4.2.2 의존성 배열을 없애는 방법
4.3 렌더링 속도를 올리기 위한 성능 최적화 방법
4.3.1 React.memo로 렌더링 결과 재사용하기
4.3.2 속성값과 상탯값을 불변 변수로 관리하는 방법
4.3.3 가상 돔에서의 성능 최적화
5장 레거시 프로젝트를 위한 클래스형 컴포넌트
5.1 클래스형 컴포넌트의 생명 주기 메서드
5.1.1 constructor 메서드
5.1.2 getDerivedStateFromProps 메서드
5.1.3 render 메서드
5.1.4 componentDidMount 메서드
5.1.5 shouldComponentUpdate 메서드
5.1.6 getSnapshotBeforeUpdate 메서드
5.1.7 componentDidUpdate 메서드
5.1.8 componentWillUnmount 메서드
5.1.9 getDerivedStateFromError, componentDidCatch 메서드
5.2 클래스형 컴포넌트 기본 사용법
5.2.1 setState 메서드 이해하기
5.2.2 클래스 필드를 이용해 이벤트 처리 메서드 작성하기
5.2.3 생명 주기 메서드에서 컨텍스트 데이터 사용하기
5.3 컴포넌트의 공통 기능 관리하기
5.3.1 고차 컴포넌트를 이용한 공통 기능 관리
5.3.2 렌더 속성값을 이용한 공통 기능 관리
5.4 클래스형 컴포넌트와 훅의 관계
5.5 클래스형 컴포넌트를 훅으로 변환하기
5.5.1 constructor 메서드
5.5.2 componentDidUpdate 메서드
5.5.3 getDerivedStateFromProps 메서드
5.5.4 forceUpdate 메서드
5.6 기존 클래스형 컴포넌트를 고려한 커스텀 훅 작성법
5.6.1 커스텀 훅의 반환값이 없는 경우
5.6.2 커스텀 훅의 반환값이 있는 경우
6장 리덕스로 상태 관리하기
6.1 리덕스 사용 시 따라야 할 세 가지 원칙
6.2 리덕스의 주요 개념 이해하기
6.2.1 액션
6.2.2 미들웨어
6.2.3 리듀서
6.2.4 스토어
6.3 데이터 종류별로 상탯값 나누기
6.3.1 상탯값 나누기 예제를 위한 사전 작업
6.3.2 리듀서에서 공통 기능 분리하기
6.4 리액트 상탯값을 리덕스로 관리하기
6.4.1 react-redux 패키지 없이 직접 구현하기
6.4.2 react-redux 패키지 사용하기
6.5 reselect 패키지로 선택자 함수 만들기
6.5.1 reselect 패키지 없이 구현해 보기
6.5.2 reselect 패키지 사용하기
6.5.3 reselect에서 컴포넌트의 속성값 이용하기
6.5.4 컴포넌트 인스턴스별로 독립된 메모이제이션 적용하기
6.6 리덕스 사가를 이용한 비동기 액션 처리
6.6.1 리덕스 사가 시작하기
6.6.2 여러 개의 액션이 협업하는 사가 함수
6.6.3 사가 함수의 예외 처리
6.6.4 리덕스 사가로 디바운스 구현하기
6.6.5 사가 함수 테스트하기
7장 바벨과 웹팩 자세히 들여다보기
7.1 바벨 실행 및 설정하기
7.1.1 바벨을 실행하는 여러 가지 방법
7.1.2 확장성과 유연성을 고려한 바벨 설정 방법
7.1.3 전체 설정 파일과 지역 설정 파일
7.1.4 바벨과 폴리필
7.2 바벨 플러그인 제작하기
7.2.1 AST 구조 들여다보기
7.2.2 바벨 플러그인의 기본 구조
7.2.3 바벨 플러그인 제작하기: 모든 콘솔 로그 제거
7.2.4 바벨 플러그인 제작하기: 함수 내부에 콘솔 로그 추가
7.3 웹팩 초급편
7.3.1 웹팩 실행하기
7.3.2 로더 사용하기
7.3.3 플러그인 사용하기
7.4 웹팩 고급편
7.4.1 나무 흔들기
7.4.2 코드 분할
7.4.3 로더 제작하기
7.4.4 플러그인 제작하기
8장 서버사이드 렌더링 그리고 Next.js
8.1 서버사이드 렌더링 초급편
8.1.1 클라이언트에서만 렌더링해 보기
8.1.2 서버사이드 렌더링 함수 사용해 보기: renderToString
8.1.3 서버 데이터를 클라이언트로 전달하기
8.1.4 스타일 적용하기
8.1.5 이미지 모듈 적용하기
8.2 서버사이드 렌더링 고급편
8.2.1 페이지를 미리 렌더링하기
8.2.2 서버사이드 렌더링 캐싱하기
8.2.3 서버사이드 렌더링 함수 사용해 보기: renderToNodeStream
8.3 넥스트 초급편
8.3.1 넥스트 시작하기
8.3.2 웹팩 설정 변경하기
8.3.3 서버에서 생성된 데이터를 전달하기
8.3.4 페이지 이동하기
8.3.5 에러 페이지 구현하기
8.4 넥스트 고급편
8.4.1 페이지 공통 기능 구현하기
8.4.2 넥스트에서의 코드 분할
8.4.3 웹 서버 직접 띄우기
8.4.4 서버사이드 렌더링 캐싱하기
8.4.5 페이지 미리 렌더링하기
8.4.6 styled-components 사용하기
9장 정적 타입 그리고 타입스크립트
9.1 타입스크립트란?
9.1.1 동적 타입 언어와 정적 타입 언어
9.1.2 타입스크립트의 장점
9.1.3 실습을 위한 준비
9.2 타입스크립트의 여러 가지 타입
9.2.1 타입스크립트의 다양한 타입
9.2.2 열거형 타입
9.2.3 함수 타입
9.3 인터페이스
9.3.1 인터페이스로 객체 타입 정의하기
9.3.2 인터페이스로 정의하는 인덱스 타입
9.3.3 그 밖에 인터페이스로 할 수 있는 것
9.4 타입 호환성
9.4.1 숫자와 문자열의 타입 호환성
9.4.2 인터페이스의 타입 호환성
9.4.3 함수의 타입 호환성
9.5 타입스크립트 고급 기능
9.5.1 제네릭
9.5.2 맵드 타입
9.5.3 조건부 타입
9.6 생산성을 높이는 타입스크립트의 기능
9.6.1 타입 추론
9.6.2 타입 가드
9.7 타입스크립트 환경 구축하기
9.7.1 create-react-app과 넥스트에서 타입스크립트 사용하기
9.7.2 프레임워크를 사용하지 않고 타입스크립트 환경 구축하기
9.7.3 기타 환경 설정하기
9.8 리액트에 타입 적용하기
9.8.1 리액트 컴포넌트에서 타입 정의하기
9.8.2 리덕스에서 타입 정의하기
10장 다가올 리액트의 변화: concurrent 모드
10.1 블로킹 vs. 논블로킹 렌더링
10.2 작업의 우선순위를 통한 효율적인 CPU 사용
10.3 서스펜스로 가능해진 컴포넌트 함수 내 비동기 처리
10.3.1 컴포넌트 함수 내에서 비동기로 모듈 가져오기
10.3.2 컴포넌트 함수 내에서 API로 데이터 받기