Study/React
[React] Ch 02
김만재
2023. 8. 11. 16:03
* 이 글은 강의를 들으며 개인적으로 정리하고 기록하기 위한 글입니다.
* 강의명 ) 프론트엔드 개발 초격차 패키지 Online
Create React App 폴더와 파일 기본 구조
- 이름을 수정하면 안되는 파일
- public/index.html : 페이지 템플릿
- src/index.js : 자바스크립트 시작점
- 알아둘 것
- public 내부의 파일만 public.html에서 사용할 수 있음
- src 폴더에 JS 파일과 CSS 파일을 작성해 사용
- Webpack은 src 폴더에 있는 파일만 보기 때문에 다른 폴더에 넣은 파일은 처리되지 않음
- package.json 파일에 해당 프로젝트에 대한 정보들이 명시되어 있음 (프로젝트 이름, 버전, 필요한 라이브러리와 라이브러리의 버전, 앱을 시작할 때/앱을 빌드할 때/ 테스트할 때 사용할 스크립트)
- “scripts” : 리액트 앱 실행, 빌드, 테스트 등의 스크립트가 명시되어 있음. 프로젝트에서 자주 실행해야하는 명령어를 작성해두면 npm 명령어로 실행 가능
- “eslintConfig” : 소스 코드를 입력할 때 문법이나 코드 포맷을 체크해주는 것에 대한 설정을 명시해줌
SPA(Single Page Application)이란?
- 웹 사이트의 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 바꿔가며 표현
History API
- index.html 하나만 사용하는 SPA에서 페이지 전환(브라우징)은 HTML5의 History API를 사용. 자바스크립트 영역에서 History API를 이용해서 현재 페이지 내에서 화면 이동이 일어난 것처럼 작동
History.back() | 세션 기록의 바로 뒤 페이지로 이동하는 비동기 메서드. 브라우저의 뒤로 가기를 누르는 것과 같은 효과를 냄 |
History.forward() | 세션 기록의 바로 앞 페이지로 이동하는 비동기 메서드. 브라우저의 앞으로 가기를 누르는 것과 같은 효과를 냄 |
History.go() | 특정한 세션 기록으로 이동하게 해주는 비동기 메서드. 1을 넣어 호출하면 바로 앞 페이지로, -1을 넣어 호출하면 바로 뒤 페이지로 이동함 |
History.pushState() | 주어진 데이터를 세션 기록 스택에 넣음. 직렬화 가능한 모든 JS객체를 저장하는 것이 가능함 |
History.replaceState() | 최근 세션 기록 스택의 내용을 주어진 데이터로 교체함 |
JSX(Javascript syntax extension)
- 자바스크립트의 확장 문법. 화면에서 UI가 보이는 모습을 나타내줌
- JSX를 이용하면 UI를 나타낼 때 자바스크립트(logic)와 HTML 구조(Markup)를 같이 사용할 수 있기 때문에 기본 UI에 데이터가 변하는 것들이나 이벤트들이 처리되는 부분을 더욱 쉽게 구현할 수 있음
화면을 그리는 방식
- 리액트에서 화면을 그리는 방식은 React.createElement API를 사용해서 엘리먼트를 생성한 후 이 엘리먼트를 In-Memory에 저장하고, ReactDOM.render 함수를 사용해서 실제 웹 브라우저에 그려줌.
- JSX는 createElement를 쉽게 사용하기 위해 사용함. 모든 UI를 만들 때마다 createElement를 사용해서 컴포넌트를 만들 수는 없기 때문에 JSX를 사용한 후 그걸 babel이 다시 createElement로 바꿔 사용함.
JSX 주의 사항(문법 규칙)
- 컴포넌트에 여러 엘리먼트 요소가 있을 때 부모 요소로 감싼 후 return 해줘야 함 → 두 개 이상은 리턴할 수 없기 때문
- 이 때 의미 없는 <div>태그를 사용을 피하기 위해 <React.Fragment>태그나 <>빈 태그를 이용할 수 있음 → DOM에 별도의 노드를 추가하지 않고 여러 자식을 그룹화 할 수 있게 됨
react 사용시 유용한 익스텐션
ES7+ React/Redux/React-Native snippets
react-icons 모듈을 이용해 아이콘 구현하기
- 필요한 패키지 설치
- npm install react-icons
- react icons 사용법
- React Icons
props를 통해 컴포넌트 간 데이터 전달하기
- Props: Properities의 줄임말. 상속하는 부모 컴포넌트로부터 자식 컴포넌트에 데이터 등을 전달하는 방법
- Props는 읽기 전용(immutable)으로 자식 컴포넌트 입장에서는 변하지 않음 → 변하게 하려면 부모 컴포넌트에서 state를 변경시켜줘야 함
map() 메소드를 사용한 지출 목록 나열
JSX Key 속성 이해하기
- 리액트에서 요소의 리스트를 나열할 때 Key를 넣어줘야 함
- Key는 리액트가 변경, 추가, 또는 제거된 항목을 식별하는 데 도움됨
- 요소에 안정적인 ID를 부여하려면 배열 내부의 요소에 키를 제공해야 함
filter 메소드를 사용한 지출 목록 지우기
React state
- 리액트에서 데이터가 변할 때 화면을 다시 렌더링 해주기 위해서는 react state를 사용해야 함
- react state: 컴포넌트의 렌더링 결과물에 영향을 주는 데이터를 갖고 있는 객체
- state가 변경되면 컴포넌트는 리렌더링(Re-rendering)됨
- state는 컴포넌트 안에서 관리됨
constructor
class User {
constructor(name) {
this.name = name;
}
sayHi() {
alert(this.name);
}
let user = new User("John");
user.sayHi();
- constructor(생성자)를 사용하면 인스턴스화된 객체에서 다른 메서드를 호출하기 전에 수행해야 하는 사용자 지정 초기화를 제공할 수 있음
- 클래스를 new를 붙여서 ( new User(”John”) ) 인스턴트 객체로 생성하면 넘겨받은 인수와 함께 constructor가 먼저 실행됨. 이때 넘겨받은 인수인 John이 this.name에 할당됨
super(props)
- JS에서 super 키워드는
- 자식 클래스 내에서 부모 클래스의 생성자를 호출할 때 사용
- 자식 클래스 내에서 부모 클래스의 메소드를 호출할 때 사용
- super 이후에 this 키워드
- 생성자에서는 super 키워드 하나만 사용되거나 this 키워드가 사용되기 전에 호출되어야 함
- 부모 클래스의 생성자를 호출하기 전에 this.name을 사용하려고 하면 문제가 되기 때문 → React에서 this.state를 생성자에서 정의할 때 super가 먼저 와야 하는 이유도 이와 같음
- 생성자에서는 super 키워드 하나만 사용되거나 this 키워드가 사용되기 전에 호출되어야 함
- React에서 super에 props를 인자로 전달하는 이유
- React.Component 객체가 생성될 때 props 속성을 초기화하기 위해 부모 컴포넌트에게 props를 전달
- 생성자 내부에서도 this.props를 정상적으로 사용할 수 있도록 보장하기 위해서
State와 Props
- Props
- 상속해야하는 부모 컴포넌트로부터 자녀 컴포넌트에 데이터 등을 전달하는 방법
- 읽기 전용(immutable)으로 자녀 컴포넌트 입장에서는 변하지 않음
- → 변하게 하려면 부모 컴포넌트에서 state를 변경시켜줘야 함
- State
- 부모 컴포넌트에서 자녀 컴포넌트로 데이터를 보내는 게 아닌 해당 컴포넌트 내부에서 데이터를 전달
- → 예를 들어, 검색창에 글을 입력할 때 글이 변하는 것은 state를 바꿈
- 변경 가능(mutable)
- state가 변하면 re-render됨