render() { ... }
HTML의 DOM 트리
1. 데이터를 업데이트하면 전체 UI를 Virtual DOM에 리렌더링합니다.
2. 이전 Virtual DOM에 있던 내용과 현재 내용을 비교합니다.
3. 바뀐 부분만 실제 DOM에 적용합니다.
1. ESLint: 자바스크립트 문법 및 코드 스타일을 검사해 주는 도구입니다.
2. Reactjs Code Snippets: 리액트 컴포넌트 및 라이프사이클 함수를 작성할 때 단축 단어를 사용하여 간편하게 코드를 자동으로 생성해 낼 수 있는 코드 스니펫 모음입니다. 검색했을 때 유사한 결과가 여러 개 나올 수 있는데 제작자가 charalampos karypidis인 것을 설치하세요.
3. Prettier-Code formatter: 코드 스타일을 자동으로 정리해 주는 도구입니다.
$ cd hello-react
$ yarn start # 또는 npm start
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>
);
}
function App() {
return (
<div>
Hello <b>react</b>
</div>
);
}
function App() {
return React.createElement("div", null, "Hello ", React.createElement("b", null, "react"));
}
import React from 'react';
function App() {
return (
<div>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
</div>
);
}
export default App;
import React, { Fragment } from 'react';
function App() {
return (
<Fragment>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
</Fragment>
);
}
export default App;
import React from 'react';
function App() {
return (
<>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
</>
);
}
export default App;
import React from 'react';
function App() {
const name = '리액트';
return (
<>
<h1>{name} 안녕!</h1>
<h2>잘 작동하니?</h2>
</>
);
}
export default App;
import React from 'react';
function App() {
const name = '리액트';
return (
<div>
{name === '리액트' ? (
<h1>리액트입니다.</h1>
) : (
<h2>리액트가 아닙니다.</h2>
)}
</div>
);
}
export default App;
import React from 'react';
function App() {
const name = '뤼왝트';
return <div>{name === '리액트' ? <h1>리액트입니다.</h1> : null}</div>;
}
export default App;
import React from 'react';
function App() {
const name = '뤼왝트';
return <div>{name === '리액트' && <h1>리액트입니다.</h1>}</div>;
}
export default App;
import React from 'react';
import './App.css';
function App() {
const name = undefined;
return name;
}
export default App;
import React from 'react';
import './App.css';
function App() {
const name = undefined;
return name || '값이 undefined입니다.';
}
export default App;
import React from 'react';
import './App.css';
function App() {
const name = undefined;
return <div>{name}</div>;
}
export default App;
PREV
import React from 'react';
function App() {
const name = '리액트';
const style = {
// background-color는 backgroundColor와 같이 -가 사라지고 카멜 표기법으로 작성됩니다.
backgroundColor: 'black',
color: 'aqua',
fontSize: '48px', // font-size -> fontSize
fontWeight: 'bold', // font-weight -> fontWeight
padding: 16 // 단위를 생략하면 px로 지정됩니다.
};
return <div style={style}>{name} </div>;
}
export default App;
import React from 'react';
function App() {
const name = '리액트';
return (
<div
style={{
// background-color는 backgroundColor와 같이 -가 사라지고 카멜 표기법으로 작성됩니다.
backgroundColor: 'black',
color: 'aqua',
fontSize: '48px', // font-size -> fontSize
fontWeight: 'bold', // font-weight -> fontWeight
padding: 16 // 단위를 생략하면 px로 지정됩니다.
}}
>
{name}
</div>
);
}
export default App;
import React from 'react';
import './App.css';
function App() {
const name = '리액트';
return (
<>
<div className="react">{name}</div>
<input></input>
</>
);
}
export default App;
import React from 'react';
import './App.css';
function App() {
const name = '리액트';
return (
<>
<div className="react">{name}</div>
<input />
</>
);
}
export default App;
import React from 'react';
import './App.css';
function App() {
const name = '리액트';
return (
<>
{/* 주석은 이렇게 작성합니다. */}
<div
className="react" // 시작 태그를 여러 줄로 작성하게 된다면 여기에 주석을 작성할 수 있습니다.
>
{name}
</div>
// 하지만 이런 주석이나
/* 이런 주석은 페이지에 그대로 나타나게 됩니다. */
<input />
</>
);
}
export default App;
JSX는 HTML과 비슷하지만 완전히 똑같지는 않습니다. 코드로 보면 XML 형식이지만 실제로는 자바스크립트 객체이며, 용도도 다르고 문법도 조금씩 차이가 납니다. 2.4절에서 다룬 몇 가지 문법 차이를 잘 기억해 두세요.
1) ( )에 알맞은 단어를 채워넣으세요.
리액트는 ( ) 방식을 사용하여 ( ) 업데이트를 추상화함으로써 DOM 처리 횟수를 최소화하고 효율적으로 진행합니다.
리액트는 구조가 MVC, MVW 등인 프레임워크와 달리, 오직 ( )만 신경 쓰는 ( )입니다.
해설&정답)
Virtual DOM
DOM
V(View)
라이브러리
1. 데이터를 업데이트하면 전체 UI를 Virtual DOM에 리렌더링합니다.
2. 이전 Virtual DOM에 있던 내용과 현재 내용을 비교합니다.
3. 바뀐 부분만 실제 DOM에 적용합니다.
2) 다음 코드는 동작하지 않습니다. 오류가 나는 이유와 오류를 해결할 수 있는 세 가지 방법을 제시하세요.
import React, { Fragment } from 'react';
function App() {
return (
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
);
}
export default App;
해설&정답)
//1번째 방법
import React, { Fragment } from 'react';
function App() {
return (
<div>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
</div>
);
}
export default App;
//2번째 방법
import React, { Fragment } from 'react';
function App() {
return (
<Fragment>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
</Fragment>
);
}
export default App;
//3번째 방법
import React, { Fragment } from 'react';
function App() {
return (
<>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
</>
);
}
export default App;
1) 다음 중 알맞은 설명을 고르고, 틀린 설명은 올바르게 고쳐보세요.
① 자주 사용되는 기능들을 정리해 모아 놓은 것을 프레임워크라고 한다.
② 사용자와 컴퓨터 프로그램이 서로 상호작용하기 위해 서로간의 입출력을 제어해주는 것을 UX 라고 한다.④ 프레임워크는 흐름의 제어 권한을 개발자가 가지고 있다.
③ 리액트는 대표적인 자바스크립트 UI 라이브러리이다.
④ 프레임워크는 흐름의 제어 권한을 개발자가 가지고 있다.
⑤ 라이브러리는 코드 작성에 도움이 되는 타인이 작성한 코드의 집합이 아니다.
해설&정답)
알맞은 설명: ③
① 자주 사용되는 기능들을 정리해 모아 놓은 것을 프레임워크라이브러리라고 한다.
② 사용자와 컴퓨터 프로그램이 서로 상호작용하기 위해 서로간의 입출력을 제어해주는 것을 UX**UI(사용자 인터페이스, User Interface)**라고 한다.
④ 프레임워크는 흐름의 제어 권한을 개발자프레임워크가 가지고 있다.
⑤ 라이브러리는 코드 작성에 도움이 되는 타인이 작성한 코드의 집합이 아니다이다
https://cocoon1787.tistory.com/745
[개발상식] 프레임워크(Framework) 와 라이브러리(Library)의 차이
🚀 "프레임워크와 라이브러리의 차이를 아시나요?"" "음... 프레임워크는 뼈대이고 라이브러리는 모듈 같은 것이고....😰" "그럼 최근에 사용하신 프레임워크와 라이브러리를 알려주세요." "... ex
cocoon1787.tistory.com
2) 다음 코드를 실행하면 오류가 발생합니다. 오류를 해결할 수 있는 2가지 방법을 찾아보세요.
import './App.css';
function App(){
const name = '리액트';
return (
<>
<div className="react">{name}</div>
<input>
</>
);
}
export default App;
해설&정답)
input 태그를 닫아 주지 않아 발생한 오류입니다.
<input></input> → 이렇게 태그를 닫아주거나
<input /> → 태그 사이에 별도의 내용이 들어가지 않는 경우에는 다음과 같이 작성할 수도 있습니다.(self-closing 태그)
3) 잘못된 내용을 고르시오.
(1) JSX 밖에서 if 문을 사용해 사전에 값을 설정할 수 있다.
(2) { } 안에 조건부 연산자를 사용할 수 있다
(3) 값이 0일 경우, false로 처리되어 아무것도 나타나지 않는다.
(4) 조건부연산자 대신 and 연산자를 사용할 수 있다
해설&정답)
정답 : (3)번
값이 0일 경우, falsy 처리되며, 화면에 그대로 나타난다!
해설 :
(4)번 + (3)번
#조건부 연산자 사용
function App() {
const name = "뤼액트";
return <div>{name === '리액트'? <h1>리액트입니다</h1> : null}</div>;
}
export default App;
#AND 연산자 사용
function App() {
const name = "뤼액트";
return <div>{name === '리액트' && <h1>리액트입니다</h1>}</div>;
}
export default App;
(1)번 + (2)번
function App() {
const name = '리액트';
return (
<div>
{name === '리액트' ? (
<h1>리액트입니다.</h1>
):(
<h2>리액트가 아닙니다</h2>
)}
</div>
)
}
export default App;
4) 해당 코드에서 잘못된 부분을 고르시오.
#1
import { Fragment } from 'react';
function App() {
return (
(1) <Fragment>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
(2) <input />
</Fragment>
);
}
export default App;
#2
function App() {
const name = "뤼액트";
return (
(3) <>
<h1>리액트 안녕!</h1>
<h2>잘 작동하니?</h2>
(4) </>
<div>
(5) {name === '리액트'? <h1>리액트입니다</h1> : null}
</div>
);
}
해설&정답)
정답 : (4)번
컴포넌트 내에 여러 요소가 있다면, 반드시 부모 요소 하나로 감싸야 하는데,
아래 div 요소가 전체적으로 감싸이지 않은 상태,
</> 는 </div> 아래에 위치해야 올바른 코드가 된다!
해설 :
(1) <fragment></fragment> 로 묶을 수 있음
(2) 추가할 내용이 없으면 input 태그는 바로 닫을 수 있음
(3) <> </> 형태로 묶을 수 있음
(5) { } 안에 조건부 연산자 사용이 가능함 > 삼항 연산자 사용 o
참조) 리액트를 다루는 기술
https://thebook.io/080203/0033/
[리액트] 블로그 포스트 생성 폼 만들기 (0) | 2023.10.12 |
---|---|
[리액트] 컴포넌트, 함수, Fragment, 이벤트, useState, Bootstrap (0) | 2023.10.12 |
[리액트] 구구단 만들기 (0) | 2023.10.05 |