JavaScript

[책] CH10 리액트 라이브러리 맛보기

깊은바다거북 2022. 11. 15. 09:00

※ 책 [혼자 공부하는 자바스크립트]를 공부하며 기록, 정리해 놓은 노트이다.


(이 파트는 대강 정리하고 넘어간다)

리액트의 기본

리액트, 컴포넌트, JSX

요약:

☝🏿
리액트자바스크립트 확장 문법(JSX)을 쓰고 바벨(Babel)에게 통역 도움을 받는 대규모 프론트엔드 웹/애플리케이션용 라이브러리이다.
☝🏿
표준 태그 외에 React.Component를 상속받고 원하는 기능으로 메소드 오버라이딩한 자체 제작 클래스 컴포넌트를 만들 수 있고, 거기에 이벤트를 연결해 사용한다.


리액트 라이브러리 React Library

: 사용자 인터페이스(UI)를 쉽게 만들도록 도와주는 자바스크립트 라이브러리. 대규모 프론트엔드 웹 애플리케이션 개발을 지원한다. 리액트 네이티브로는 모바일 애플리케이션도 만들 수 있음.

React - 사용자 인터페이스를 만들기 위한 JavaScript 라이브러리
React는 상호작용이 많은 UI를 만들 때 생기는 어려움을 줄여줍니다. 애플리케이션의 각 상태에 대한 간단한 뷰만 설계하세요. 그럼 React는 데이터가 변경됨에 따라 적절한 컴포넌트만 효율적으로 갱신하고 렌더링합니다. 선언형 뷰는 코드를 예측 가능하고 디버그하기 쉽게 만들어 줍니다. 스스로 상태를 관리하는 캡슐화된 컴포넌트를 만드세요. 그리고 이를 조합해 복잡한 UI를 만들어보세요. 컴포넌트 로직은 템플릿이 아닌 JavaScript로 작성됩니다.
https://ko.reactjs.org/

리액트 라이브러리 사용 준비

HTML 파일에서 자바스크립트 파일 3개를 읽어들인다.

react.development.js react-dom.development.js babel.min.js

바벨을 적용하겠다고 선언하기

: 리액트는 자바스크립트를 확장한 확장 문법을 사용하고, 이를 쓰려면 “이 스크립트에는 바벨을 이용한 확장 문법을 쓰겠다”는 표시를 해줘야 한다.

<script type=”text/babel”></script>

루트 컴포넌트 출력하기

컴포넌트 componenet

: 리액트가 만드는, 화면에 출력되는 요소. HTML과 동일한 문법을 사용한다. 가장 최상위에 배치하는 컴포넌트는 루트 컴포넌트.

컨테이너 container

: 컴포넌트를 출력할 상자.

컴포넌트 생성: <컴포넌트 이름></컴포넌트 이름>

컴포넌트 출력: ReactDOM.render(컴포넌트, 컨테이너)

JSX(JavaScript XML: 자바스크립트 확장 문법)

: 자바스크립트 코드 내부에 HTML 코드를 사용한 것. 웹 브라우저는 읽을 수 없고 바벨이 읽어서 일반적인 자바스크립트 문법으로 변환하고 실행해주는 원리이다.

// 1) JSX문법으로 태그 만들기
<script type=”text/babel”>
		const component = <h1>바벨 덕분에 실행할 수 있는 HTML코드</h1>
		const container = document.getElementById('root')
		ReactDOM.render(component, container)
</script>
<body>
		<div id="root"></div>
</body>
// 2) JSX문법으로 태그 내부에 표현식 삽입하고 출력하기
(생략)

클래스 컴포넌트

: h1, img태그 등 HTML 표준 태그 외에 사용자가 직접 클래스를 이용해 컴포넌트를 만든 것.

(cf. 함수로 만드는 컴포넌트 = 함수 컴포넌트.)

React.Component 클래스를 상속받고 render() 메소드를 오버라이드해서 원하는 것을 화면에 출력하도록 만들면 된다.

예제) 루트 컴포넌트 출력을 클래스 컴포넌트로 구현하기

예제) 컴포넌트의 속성 사용하기(img 태그에 url 집어넣어 사진 출력하기)

컴포넌트의 기본적인 속성과 메소드

사용자 지정 클래스 컴포넌트를 만들 때 상속받는 React.Component 클래스 중,

자주 (오버라이드해서)사용되는 메소드:

constructor(props) // 일단 super(props)로 부모 생성자를 호출해주고 덧붙인다. render() // 출력할 것 componentDidMount() // 컴포넌트가 화면에 출력될 때 호출 componentWillUnmount() // 컴포넌트가 화면에서 제거될 때 호출

⇒ 아래 두 개를 라이프사이클 메소드(컴포넌트가 내부적으로 특정 상황에 호출하는 메소드)라고 함.

자주 (변경해서)사용되는 속성:

state 속성: 출력할 값을 저장함.

this.state = { 속성: 값 } // 생성자 안에 상태 선언하기 this.setState({ 변경할 속성: 값 }) // 생성자 밖에서 상태 변경하기

예제) 리액트를 활용한 현재 시간 출력 프로그램

컴포넌트에 이벤트 연결하기

  1. 메소드를 선언한다.
  1. 메소드에 this를 바인드 한다: this.메소드이름 = this.메소드이름.bind(this)
  1. render() 메소드에서 출력하는 태그의 이벤트 속성에 메소드를 입력한다.(=이벤트 연결 완료)

이벤트 연결 템플릿

class App extends React.component {
		constructor(props) {
				super(props)
				this.메소드 이름 = this.메소드 이름.bind(this) // 2. 메소드에 this 바인드 
		}
		
		render() {
				// 3. 이벤트 연결
				return <h1 이벤트 이름={this.메소드 이름}></h1>
		
		// 1. 메소드 선언
		메소드 이름(event) { 
				// 이벤트가 호출될 때 실행할 코드
		}
}

예제) 버튼을 클릭한 횟수를 세는 프로그램

예제) this를 바인딩 하는 다른 2가지 방법

리액트 이벤트 이름 목록:

합성 이벤트(SyntheticEvent) - React
이 문서는 React의 이벤트 시스템 일부를 구성하는 SyntheticEvent 래퍼를 설명합니다. 더 많은 정보는 이벤트 처리하기 문서를 보세요. 이벤트 핸들러는 모든 브라우저에서 이벤트를 동일하게 처리하기 위한 이벤트 래퍼 SyntheticEvent 객체를 전달받습니다. stopPropagation() 와 preventDefault() 를 포함해서 인터페이스는 브라우저의 고유 이벤트와 같지만 모든 브라우저에서 동일하게 동작합니다. 브라우저의 고유 이벤트가 필요하다면 nativeEvent 어트리뷰트를 참조하세요.
https://ko.reactjs.org/docs/events.html#clipboard-events

예제) 입력 양식 이벤트

스타일 지정하기

style 속성에 객체를 지정하면 된다.

문서 객체 모델과 비슷하다. font-size: 2px(=CSS) ⇒ fontSize: 2 또는 “font-size”: 2

render() {
		const textStyle = { color: 'red', fontSize: 2 }
		return <h1 style={textStyle}>글자</h1>
}

예제) 체크되어 있을 땐 파랑, 아니면 빨강으로 글시를 출력하는 프로그램

컴포넌트 배열

컴포넌트를 배열에 담아서 render() { … return <ul>{list}</ul> } 식으로 출력할 수 있다.

일반적으로 map()과 함께 사용한다.



리액트와 데이터

컴포넌트끼리 커뮤니케이션하게 만들기

요약:

☝🏿
여러 개의 컴포넌트가 속성 데이터를 잘 주고받게 하기 위해 필요한 보조 문법이 바로 Flux 패턴.


여러 개의 컴포넌트 사용하기

App 컴포넌트에 Item 컴포넌트 추가

부모에서 자식의 state 속성 변경하기

자식에서 부모의 state 속성 변경하기

리액트로 만드는 할 일 목록 애플리케이션

⇒ 컴포넌트가 2단계로 부모자식 계층을 이루는 상태에서만도 데이터를 주고받게 하기 위해 복잡한 코드가 필요했다. 더 많은 컴포넌트를 추가하려면 Flux 패턴을 이용해야 한다.

React Flux 패턴

: 리액트로 데이터를 쉽게 교환하기 위해서 만들어진 디자인 패턴. (Redux같은 애들)

Flux 패턴을 활용할 수 있게 해주는 라이브러리를 사용하면 데이터를 쉽게 관리할 수 있다. (MobX 라이브러리 등)

디자인 패턴 design pattern

: 효율적으로 프레임워크를 개발할 수 있게 고안한 패턴. 개발하는 과정에서 빈번하게 발생하는 문제들이 발생했을 때 해결책을 재사용할 수 있도록 만든 패턴이다.


참고:

[책] 혼자 공부하는 자바스크립트 - 윤인성


Uploaded by N2T