웹 프로그래밍/React.js
[React.js] 프로젝트 구성, JSX
코딩하는 문과생
2020. 6. 21. 11:31
프로젝트를 생성하고 프로젝트를 열어보면 아래와 같은 형태로 리액트 프로젝트가 구성되어 있다.
리액트가 유저인터페이스로 보여지는 방법은 App.js -> index.js -> index.html 파일 순으로 따라 가보면 리액트의 렌더링하는 방법을 알 수 있게 된다.
[App.js]
create-react-app 명령어를 통해 리액트 프로젝트를 구성하면 App.js에는 기본적으로 함수기반의 컴포넌트가 생성된다.
함수기반의 컴포넌트와 클래스기반 컴포넌트는 약간 차이가 있는데,
- 함수기반 컴포넌트 : 상태값 변경없이 props만 부모 컴포넌트로부터 받는 경우, 렌더링만 필요한 경우
- 클래스기반 컴포넌트 : 상태값 변경이 필요한 경우
로 나뉘어진다.
조금 더 쉽게 보기 위해 아래 함수기반 컴포넌트를 클래스기반 컴포넌트로 수정하겠다.
함수기반
import React from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
클래스 기반
import React, {Component} from 'react'; //리액트 임포트
import logo from './logo.svg'; //사진 임포트
import './App.css'; //스타일 임포트
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App; //컴포넌트 내보내기
[index.js]
ReactDOM.render를 이용해 App 컴포넌트를 root 라는 div에 그려주도록 한다.
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App'; //App.js 가져오기
import * as serviceWorker from './serviceWorker';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>, //1
document.getElementById('root') //2
); //1. 렌더링 할 결과물 2. 어떤 DOM에 그릴지
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
[index.html]
실제 div 태그 내에는 아무 내용이 없지만 index.js를 매개로 App컴포넌트가 렌더링된다.
<div id="root"></div>
[JSX]
1. return내 값은 하나의 태그를 통해 꼭 닫혀있어야 한다.
import React, {Component} from 'react';
class App extends Component {
render() {
return (
<div> //<--
<div>
안녕
</div>
<div>
하하
</div>
</div> //<--
);
}
}
export default App;
2. JSX 내 자바스크립트 값 사용
{}을 이용해 값을 불러온다.
import React, {Component} from 'react';
class App extends Component {
render() {
const str = '반가워';
return (
<div>
hello {str} !
</div>
);
}
}
export default App;
3-1. 스타일 부여
- 객체 형태로 스타일을 부여한다.
import React, {Component} from 'react';
class App extends Component {
render() {
const style = {
backgroundColor: 'black',
padding: '1rem',
color: 'aqua',
fontSize: '36px',
fontWeight: 600,
};
return (
<div style={style}>
안녕
</div>
);
}
}
export default App;
3-2. 스타일 부여
//App.js
import React, { Component } from 'react';
import './App.css'
class App extends Component {
render() {
return (
<div className="App">
잘가
</div>
);
}
}
export default App;
//App.css
.App {
background: black;
color: aqua;
font-size: 36px;
padding: 1rem;
font-weight: 600;
}