React는 Javascript 프로젝트 어디에든 유연하게 적용
Facebook에서 관리되어 안정적이고 가장유명,리액트 네이티브로 모바일개발 가능.
// 실제 작성할 JSX 예시
function App() {
return (
<h1>Hello, sumin!</h1>
);
}
// 위와 같이 작성하면, 바벨이 다음과 같이 자바스크립트로 해석하여 준다.
function App() {
return React.createElement("h1", null, "Hello, sumin!");
}
- JSX는 하나의 파일에 자바스크립트와 HTML을 동시에 작성하여 편리하다.
### 🧇 JSX 문법
#### 1. 반드시 부모 요소 하나가 감싸는 형태여야 한다.
- Virtual DOM에서 컴포넌트 변화를 감지할 때 때 효율적으로 비교할 수 있도록 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙이 있기 때문이다.
ex) 에러 케이스
```javascript
// Fail to compile
// parsing error : adjacent JSX elements be wrapped in an enclosing tag
// Did you want a JSX fragment <>...</>?
function App() {
return (
<div>Hello</div>
<div>Kimsumin!</div>
);
}
-----------------------------
ex) 정상 코드1 (<div></div>)
// div를 사용 하였기 때문에 스타일 적용시 작성한 코드를 div로 한번 더 감쌌다는 부분을 고려해야 한다.
function App() {
return (
<div>
<div>Hello</div>
<div>kimsumin!</div>
</div>
);
}
function App() {
const name = 'kimsumin';
return (
<div>
<div>Hello</div>
<div>{name}!</div>
</div>
);
}
if 구문과 for 루프는 JavaScript 표현식이 아니기 때문에 JSX 내부 자바스크립트 표현식에서는 사용할 수 없다.
그렇기 때문에 조건부에 따라 다른 렌더링 시 JSX 주변 코드에서 if문을 사용하거나, {}안에서 삼항 연산자(조건부 연산자)를 사용 한다.
function login(){
let message="";
let login='true';
if(login==='true'){
message=<div>kimsumin</div>
} else{
message=<div>Error</div>
}
return (
<>
{message}
</>
)
}
function login(){
const loginname='true';
return(
<>
<div>
{loginname==='true'(
<div>kimsumin</div>
):(
<div>준회원 입니다.</div>
)}
</div>
</>
)
}
function App() {
const style = {
backgroundColor: 'green',
fontSize: '12px'
}
return (
<div style={style}>Hello, GodDaeHee!</div>
);
}
일반 HTML에서 CSS 클래스를 사용할 때에는 class 라는 속성을 사용한다.
JSX에서는 class가 아닌 className 을 사용한다.
function App() {
const style = {
backgroundColor: 'green',
fontSize: '12px'
}
return (
<div className="testClass">Hello, kimsumin!</div>
);
}
5. JSX 내에서 주석 사용 방법
- JSX 내에서 {/*…*/} 와 같은 형식을 사용 한다.
### 자바스크립트 명언랜덤
```javascript
import logo from './logo.svg';
import './App.css';
function App() {
const proverb=['좌절감으로 배움을 늦추지마라.','stay forme','history','random','good']
const getRnadom=(length)=>{
return parseInt(Math.random()*length);
}
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>
{proverb[getRnadom(proverb.length)]}
</header>
</div>
);
}
export default App;
import "./ExpenseItem.css";
function ExpenseItem() {
// 날짜 객체생성
const expenseDate = new Date(2022, 12, 25);
const expenseTitle='car Insurance';
const expenseAmout=294.67;
return (
<div className="expense-item">
<div>{expenseDate.toISOString()}</div>
<div class="expense-item__description">
<h2>{expenseTitle}</h2>
<div class="expense-item__price">{expenseAmout}</div>
</div>
</div>
);
}
export default ExpenseItem;