리액트(React) - Facebook에서 개발한 JavaScript 사용자 인터페이스를 만들기 위한 라이브러리 - 재사용이 가능한 UI 컴포넌트를 작성할 수 있게 해주며, 데이터의 변경에 따라 UI를 효율적으로 업데이트할 수 있는 방법을 제공 - Virtual DOM을 사용해서 실제 DOM 조작을 최소화하고 성능을 향상 - 단일 페이지 응용 프로그램(SPA) 및 대규모 웹 애플리케이션에서 많이 사용 - JSX라는 문법을 통해 JavaScript 코드 내에서 HTML과 유사한 문법을 사용하여 컴퍼넌트를 정의
라이브러리(library) vs 프레임워크(Framework) 라이브러리 - 개발자가 필요할 때 함수 또는 모듈을 호출하여 사용하는 방식으로 동작 - 애플리케이션의 전체 구조를 개발자가 직접 설계 - 추가적인 기능을 제공하거나 특정 기능을 수행하기 위한 도구
프레임워크 - 제공된 틀 안에서 코드를 작성하고 프레임워크가 코드를 호출하여 실행 - 개발자는 프레임워크가 정의한 규칙과 패턴을 따라야 함 - 애플리케이션의 구조와 제어 흐름을 결정하며, 개발자는 프레임워크에 의해 제어되는 애플리케이션의 일부분을 작성
public 디렉토리 브라우저에서 직접 액세스할 수 있는 파일들이 포함 index.html: 웹 애플리케이션의 진업점
src 디렉토리 애플리케이션의 소스 코드를 포함 index.js: React 앱의 진입점 파일. ReactDOM.render를 호출하여 React 컴퍼넌트를 DOM에 렌더링 App.js: 기본적인 앱 컴퍼넌트가 정의된 파일. 앱의 기본 구조와 레이아웃을 정의 App.css: App 컴퍼넌트에 적용되는 CSS 스타일을 정의
// Hello.js
importReactfrom"react";
functionHello(){
return<div>안녕하세요 React</div>
}
exportdefaultHello;
// App.js
importReactfrom"react";
importHellofrom"./Hello";
functionApp(){
return (
<Hello/>
);
}
exportdefaultApp;
여러개 불가능 <div> </div>
// App.js
importReactfrom"react";
importHellofrom"./Hello";
functionApp(){
return (
<Hello/>
<Hello/>
<Hello/>
);
}
exportdefaultApp;
// App.js
importReactfrom"react";
importHellofrom"./Hello";
functionApp(){
return (
<div>
<Hello/>
<Hello/>
<Hello/>
</div>
);
}
exportdefaultApp;
// App.js
importReactfrom"react";
importHellofrom"./Hello";
functionApp(){
return (
<div>
<Hello/>
<Hello/>
<Hello/>
<div>DIV 사용</div>
</div>
);
}
exportdefaultApp;
<> </> // 빈 <> 사용
// App.js
importReactfrom"react";
importHellofrom"./Hello";
functionApp(){
return (
<>
<Hello/>
<Hello/>
<Hello/>
<div>DIV 사용</div>
</>
);
}
exportdefaultApp;
// App.js
importReactfrom"react";
importHellofrom"./Hello";
functionApp(){
constuserid='apple';
conststyle= {
backgroundColor:'deepskyblue',
color:'deeppink',
fontSize:30,
padding:'1em'
}
return (
<>
<Hello/>
<Hello/>
<Hello/>
<div>DIV 사용</div>
<divstyle={style}>아이디: {userid}</div>
</>
);
}
exportdefaultApp;
문제 App.css에 아래와 같이 style을 설정하고 App.js에 적용해보자
이름: .black-box 속성: background: black; width: 80px; height: 80px;
/* App.css */
.black-box {
background: black;
width: 80px;
height: 80px;
}
// App.js
importReactfrom"react";
importHellofrom"./Hello";
import'./App.css';
functionApp(){
constuserid='apple';
conststyle= {
backgroundColor:'deepskyblue',
color:'deeppink',
fontSize:30,
padding:'1em'
}
return (
<>
<Hello/>
<Hello/>
<Hello/>
<div>DIV 사용</div>
<divstyle={style}>아이디: {userid}</div>
<divclassName="black-box"></div>
</>
);
}
exportdefaultApp;
크롬 브라우저 확장 프로그램 설치 React Developer Tools
JSX에서의 주석
{/* 주석을 작성 */}
// App.js
importReactfrom"react";
importHellofrom"./Hello";
import'./App.css';
functionApp(){
constuserid='apple';
conststyle= {
backgroundColor:'deepskyblue',
color:'deeppink',
fontSize:30,
padding:'1em'
}
return (
<>
{/* 주석은 화면에 보이지 않습니다 */}
/* 자바스크립트 문법의 주석 */
<Hello/>
<Hello/>
<Hello/>
<div>DIV 사용</div>
<divstyle={style}>아이디: {userid}</div>
<divclassName="black-box"></div>
</>
);
}
exportdefaultApp;
컴퍼넌트에게 값 전달하기
JSX에서의 <Hello userid="apple"/>
Component function Hello(props){ <div>안녕하세요. {props.userid}님</div> }